Есть проект написанный в VS6, сейчас нужно перенести в 2010. В одном из проектов, который компилируется как DLL, возникла ошибка
error LNK2001: unresolved external symbol AddImage .def 1
В этом DEF-файле куча функций, но ругается компилятор только почему-то на 3. Перелистал уже весь MSDN, ничего не помогает. Имена совпадают, __declspec(dllexport) прописывать пробовал.
Если просто есть какие-то идеи высказывайте, я уже просто зациклен.
G>Есть проект написанный в VS6, сейчас нужно перенести в 2010. В одном из проектов, который компилируется как DLL, возникла ошибка G>error LNK2001: unresolved external symbol AddImage .def 1
G>В этом DEF-файле куча функций, но ругается компилятор только почему-то на 3. Перелистал уже весь MSDN, ничего не помогает. Имена совпадают, __declspec(dllexport) прописывать пробовал.
G>Если просто есть какие-то идеи высказывайте, я уже просто зациклен.
Давайте минимальный пример с ошибкой, а то как-то угадывать надо
Вариант 1. Нет extern "C" перед функцией.
Вариант 2. Какая-то либа не добавляется.
Здравствуйте, _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. Какая-то либа не добавляется.
Вариант 1 пробовал, не помогло. Lib файлы подключены, да и эти функции являются методами класса, который объявляется внутри проекта. Меня напрягает больше всего, что ошибка в Def файле.
Здравствуйте, _nn_, Вы писали:
__>Здравствуйте, Glas, Вы писали:
__>А нужно обязательно def файлом ? Можно и просто class __declspec(dllexport) AccuPatient .
__>Если очень хочется def файл, то тогда надо правильное имя функции писать: __>
__>LIBRARY TEST
__>EXPORTS
__>?AddImage@AccuPatient@@QAEHPAX@Z @ 21
__>
Хм, попробую. А откуда это правильное имя взять? Просто все остальные нцать функций вроде он проглатывает и в таком виде.
Здравствуйте, 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 *)"
Здравствуйте, Glas, Вы писали:
G>error LNK2001: unresolved external symbol AddImage .def 1 G>В этом DEF-файле куча функций, но ругается компилятор только почему-то на 3.
Ищи макросы, совпадающие с именами этих трёх. По типу виндовых #define CreateFile CreateFileW / #define CreateFile CreateFileA. Конкретно AddImage в Platform SDK вроде-бы нет, но может есть в твоём коде.
Здравствуйте, 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 файл и скомпилировал без него, главное другие проекты теперь не ругаются
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 )