Ошибка компоновщика при отладочной сборке с разными версиями компилятора - PullRequest
1 голос
/ 24 сентября 2010

У нас есть DLL, созданная с помощью MS Visual Studio 2010, в режиме выпуска. Мы предоставляем эту DLL различным клиентам вместе с файлом .lib. Функции в DLL экспортируются с:

extern "C" __declspec (dllexport) int analysis (int id);

У наших клиентов есть два приложения, которые используют эту DLL. Оба эти приложения импортируют функции DLL, используя:

extern "C" __declspec (dllimport) int analysis (int id);

Одно из этих приложений построено с использованием MS Visual Studio 2010. Это приложение может быть успешно создано как в режиме отладки, так и в режиме выпуска.

К сожалению, другое приложение должно использовать MS Visual Studio 2005 в качестве среды сборки. В этом приложении сборка релиза может быть успешно построена, однако при попытке выполнить сборку в режиме отладки мы получаем ошибки компоновщика:

LNK2019: неразрешенный внешний символ __imp_analyze, на который ссылается функция «void __cdecl process (char const *, char const *)» (? Process @@ ABCERFG0 @ Z) * ​​1018 *

Может кто-нибудь помочь мне понять, чего нам здесь не хватает? Мы экспортируем функции способом, который не переносится между компиляторами? Какое решение?

С уважением,

1 Ответ

2 голосов
/ 24 сентября 2010

Формат файла .obj весьма консервативен между VS2005 и VS2010.Это не должно быть проблемой, особенно потому, что это простая не искаженная ссылка на символ.И особенно не тогда, когда он работает в конфигурации Release, но не в Debug.Простое объяснение всегда лучше, чем извилистое: ваш клиент просто забыл добавить ваш .lib-файл в настройку дополнительных зависимостей компоновщика.

Остерегайтесь необходимости изменения настройки для обоих конфигурации, используйте комбинацию «Конфигурация» в верхнем левом углу диалогового окна.

Вы можете помочь своему клиенту попасть в пропасть успеха, используя комментарий #pragma (lib, "mumble.lib")ваш .h файл.

...