LNK2001 в .DEF
От: Glas  
Дата: 11.07.10 14:29
Оценка:
Есть проект написанный в VS6, сейчас нужно перенести в 2010. В одном из проектов, который компилируется как DLL, возникла ошибка
error LNK2001: unresolved external symbol AddImage .def 1

В этом DEF-файле куча функций, но ругается компилятор только почему-то на 3. Перелистал уже весь MSDN, ничего не помогает. Имена совпадают, __declspec(dllexport) прописывать пробовал.

Если просто есть какие-то идеи высказывайте, я уже просто зациклен.
Re: LNK2001 в .DEF
От: _nn_ www.nemerleweb.com
Дата: 11.07.10 14:40
Оценка:
Здравствуйте, Glas, Вы писали:


G>Есть проект написанный в VS6, сейчас нужно перенести в 2010. В одном из проектов, который компилируется как DLL, возникла ошибка

G>error LNK2001: unresolved external symbol AddImage .def 1

G>В этом DEF-файле куча функций, но ругается компилятор только почему-то на 3. Перелистал уже весь MSDN, ничего не помогает. Имена совпадают, __declspec(dllexport) прописывать пробовал.


G>Если просто есть какие-то идеи высказывайте, я уже просто зациклен.


Давайте минимальный пример с ошибкой, а то как-то угадывать надо

Вариант 1. Нет extern "C" перед функцией.
Вариант 2. Какая-то либа не добавляется.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: LNK2001 в .DEF
От: Glas  
Дата: 11.07.10 15:09
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Здравствуйте, Glas, Вы писали:



G>>Есть проект написанный в VS6, сейчас нужно перенести в 2010. В одном из проектов, который компилируется как DLL, возникла ошибка

G>>error LNK2001: unresolved external symbol AddImage .def 1

G>>В этом DEF-файле куча функций, но ругается компилятор только почему-то на 3. Перелистал уже весь MSDN, ничего не помогает. Имена совпадают, __declspec(dllexport) прописывать пробовал.


G>>Если просто есть какие-то идеи высказывайте, я уже просто зациклен.


__>Давайте минимальный пример с ошибкой, а то как-то угадывать надо


__>Вариант 1. Нет extern "C" перед функцией.

__>Вариант 2. Какая-то либа не добавляется.


.h файл
class
{
     public:
     BOOL AddImage ( LPVOID/*data*/);
}
.cpp файл
BOOL AccuPatient::AddImage( LPVOID pData )
{
    LPBYTE    lpByte = (LPBYTE) pData;
    arrImage.Add( new AccuImage( lpByte ) );
    m_ImageNumber++;

    return TRUE;
}
.DEF файл
EXPORTS
AddImage 21

Вариант 1 пробовал, не помогло. Lib файлы подключены, да и эти функции являются методами класса, который объявляется внутри проекта. Меня напрягает больше всего, что ошибка в Def файле.
Re[3]: LNK2001 в .DEF
От: _nn_ www.nemerleweb.com
Дата: 11.07.10 15:17
Оценка:
Здравствуйте, Glas, Вы писали:

А нужно обязательно def файлом ? Можно и просто class __declspec(dllexport) AccuPatient .

Если очень хочется def файл, то тогда надо правильное имя функции писать:
LIBRARY TEST
EXPORTS
?AddImage@AccuPatient@@QAEHPAX@Z @ 21
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: LNK2001 в .DEF
От: Glas  
Дата: 11.07.10 16:07
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Здравствуйте, Glas, Вы писали:


__>А нужно обязательно def файлом ? Можно и просто class __declspec(dllexport) AccuPatient .


__>Если очень хочется def файл, то тогда надо правильное имя функции писать:

__>
__>LIBRARY TEST
__>EXPORTS
__>?AddImage@AccuPatient@@QAEHPAX@Z @ 21
__>


Хм, попробую. А откуда это правильное имя взять? Просто все остальные нцать функций вроде он проглатывает и в таком виде.
Re[5]: LNK2001 в .DEF
От: _nn_ www.nemerleweb.com
Дата: 11.07.10 16:16
Оценка:
Здравствуйте, Glas, Вы писали:

G>Здравствуйте, _nn_, Вы писали:


__>>Здравствуйте, Glas, Вы писали:


__>>А нужно обязательно def файлом ? Можно и просто class __declspec(dllexport) AccuPatient .


__>>Если очень хочется def файл, то тогда надо правильное имя функции писать:

__>>
__>>LIBRARY TEST
__>>EXPORTS
__>>?AddImage@AccuPatient@@QAEHPAX@Z @ 21
__>>


G>Хм, попробую. А откуда это правильное имя взять? Просто все остальные нцать функций вроде он проглатывает и в таком виде.

А это точно работает ? Что-то подозрительно.

Самый простой вариант это убрать имплементацию функции и тогда линкер просто выругается с именем

P.S.
Есть утилита undname которая переводит в обратную сторону.

"c:\Program Files\Microsoft Visual Studio 10.0\VC\bin\undnam
e.exe" ?AddImage@AccuPatient@@QAEHPAX@Z
Microsoft (R) C++ Name Undecorator
Copyright (C) Microsoft Corporation. All rights reserved.

Undecoration of :- "?AddImage@AccuPatient@@QAEHPAX@Z"
is :- "public: int __thiscall AccuPatient::AddImage(void *)"
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: LNK2001 в .DEF
От: quodum  
Дата: 12.07.10 09:37
Оценка:
Здравствуйте, Glas, Вы писали:

G>error LNK2001: unresolved external symbol AddImage .def 1

G>В этом DEF-файле куча функций, но ругается компилятор только почему-то на 3.

Ищи макросы, совпадающие с именами этих трёх. По типу виндовых #define CreateFile CreateFileW / #define CreateFile CreateFileA. Конкретно AddImage в Platform SDK вроде-бы нет, но может есть в твоём коде.
Re[2]: LNK2001 в .DEF
От: Glas  
Дата: 12.07.10 11:37
Оценка:
Здравствуйте, quodum, Вы писали:

Q>Здравствуйте, Glas, Вы писали:


G>>error LNK2001: unresolved external symbol AddImage .def 1

G>>В этом DEF-файле куча функций, но ругается компилятор только почему-то на 3.

Q>Ищи макросы, совпадающие с именами этих трёх. По типу виндовых #define CreateFile CreateFileW / #define CreateFile CreateFileA. Конкретно AddImage в Platform SDK вроде-бы нет, но может есть в твоём коде.


Да я уже выкинул DEF файл и скомпилировал без него, главное другие проекты теперь не ругаются
Re: LNK2001 в .DEF
От: MasterZiv СССР  
Дата: 14.07.10 05:32
Оценка:
Glas wrote:

> Есть проект написанный в VS6, сейчас нужно перенести в 2010. В одном из

> проектов, который компилируется как DLL, возникла ошибка
> error LNK2001: unresolved external symbol AddImage .def 1
>
> В этом DEF-файле куча функций, но ругается компилятор только почему-то
> на 3. Перелистал уже весь MSDN, ничего не помогает. Имена совпадают,
> __declspec(dllexport) прописывать пробовал.

Там манглинг поменялся. Из .def нужно всё удалить, все экспорты, собрать DLL
и имена функций из собранного DLL взять обратно в .def. Ну или вообще плюнуть
на экспорты через .def файл, делать __declspec( __dllexport )
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.