Неверная библиотека, импортированная через комментарий #pragma (lib, ...) в Visual C ++ - PullRequest
1 голос
/ 22 марта 2010

Я использую Visual Studio 2008. У меня есть DLL и тестовая программа EXE. Для DLL есть заголовочный файл, содержащий это:

#ifdef _DEBUG
    #pragma comment(lib, "FooD.lib")
#else
    #pragma comment(lib, "Foo.lib")
#endif

Целью является динамическое связывание с FooD.dll через библиотеку импорта FooD.lib для отладочной сборки и с Foo.dll для сборки выпуска. Проблема в том, что когда я запускаю тестовую программу отладки, она хочет быть связана с Foo.dll.

Я убедился, что для тестовой программы в отладочной сборке определено _DEBUG. Если я заменим #pragma comment на директиву #error, я увижу ошибку, поэтому уверен, что #pragma comment обрабатывается так, как я ожидал.

Я также подтвердил, что существуют и FooD.dll, и FooD.lib. (Foo.dll и Foo.lib не существуют.) Но во время выполнения я получаю сообщение об ошибке «Не удается найти Foo.dll».

Есть идеи, что может пойти не так, или где я могу выяснить, почему во время выполнения ищется неправильная DLL?

1 Ответ

1 голос
/ 22 марта 2010

Обнаружил мою проблему: файл Foo.def имел следующую строку:

LIBRARY "Foo.DLL"

Это заставляет библиотеку импорта указывать Foo.dll, независимо от того, каково действительное имя DLL. Поэтому я просто закомментировал эту строку, и после этого все работало нормально.

...