VC ++ VS 2005 LNK1104 ошибка: Win32 exe-проект ищет .lib вместо .dll - PullRequest
1 голос
/ 02 марта 2012

У меня есть проект VC ++ в VS2005 следующим образом:

Установка:

  • один win 32 консольный exe в качестве точки запуска / входа
  • три других проекта DLL .... которые все компилируются
  • консоль содержит ссылки на 3 библиотеки DLL, как показано в exe \ CommonProperties \ References. Путь FullPath каждого проекта DLL показывает путь к DLL (т.е. lib1.dll) для проект lib1. То же самое для проектов lib2 и lib3.

  • для win32 exe: ... \ Конфигурационные свойства \ "C / C ++" \ Общие \ Дополнительные каталоги включаемых включений: SolutionFolder \ Lib1. ConfigProperties \ Linker \ General \ Дополнительные каталоги библиотеки также SolutionFolder \ Lib1

Проблема:

В свойствах конфигурации \ Debugging \ Environment \ Macros \ References я вижу только ссылки для LIB2.DLL и LIB3.DLL, но не LIB1.DLL

Compilaton:

Все три проекта DLL компилируются нормально.

Ошибка связи:

Fatal error LNK1104: cannot open file '..\debug\boostlib1.lib

** Почему компоновщик ищет файл lib (т.е. lib1.lib) вместо lib1.dll

Это какая-то проблема с путями? Почему я не вижу ссылку на lib1 в Config\Props\Debugging\Environment\Macros\References?

Примечание:

  • Я использую Boost 1_39 в lib1
  • win32 ссылки exe lib1, lib2, lib3
  • ссылки на lib3 lib2 и lib3
  • stdafx.h в win32 exe proj имеет директиву #pragma Once

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Вы немного теряетесь в настройках, которые подходят только для компилятора C ++ / CLI. Другими словами, управляемый код. Если вы используете boost и проект win32, то вы не используете управляемый код, и эти настройки не имеют значения.

Модель сборки собственного кода требует библиотеки импорта для DLL. .Lib файл. Это небольшой, который просто содержит список экспорта для DLL. В противном случае компоновщик не может читать DLL-файлы напрямую. Вам нужно использовать настройку Linker, Input, Additional Dependencies, чтобы указать компоновщику, на что он должен ссылаться в дополнение к вашим собственным файлам .obj. Вы можете либо прописать полное имя .lib, либо просто использовать короткое имя и использовать параметр «Дополнительные каталоги библиотек», чтобы помочь компоновщику найти файл .lib.

Сначала найдите файл .lib, который был сгенерирован для вашей DLL. Он будет расположен в том же каталоге, что и .dll. И копируется в каталог отладки решения, если проект находится в том же решении. Если вы этого не видите, вы забыли экспортировать функции с __declspec(dllexport). Дважды проверьте, запустив Dumpbin.exe / exports на сгенерированную DLL, он показывает список экспортируемых функций. И попробуйте все это в очень небольшом тестовом решении, сначала с одним EXE и одним проектом DLL.

0 голосов
/ 05 сентября 2012

Ответ на вопрос «почему?» может быть что-то столь же простое, как зависимость , которую вы могли бы добавить для своего основного проекта в проекты DLL.

В Visual Studio 2008 параметр можно найти по адресу: Project Dependencies, и простая отмена проверки проектов DLL решит проблему.

Кроме того, вы можете проверить, что: путь к DLL-библиотекам Lib больше не включается в командную строку компоновщика вашего основного проекта по адресу: Configuration Properties > Linker > Command Line

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...