Возникли проблемы с подключением статической библиотеки C ++ - PullRequest
3 голосов
/ 22 октября 2008

Я выяснил, как настроить VC ++ для компиляции кода в файл .lib вместо .exe, но у меня возникают проблемы с установкой библиотеки lib для связи с другими моими файлами .obj.

Вот как я настроил библиотеки и папки приложений. (Я не уверен, что это правильно)

AppFolder
  App.sln
  App.ncb
  *.h
  *.cpp
  Debug
    *.obj
    App.exe

и где-то еще на жестком диске ...

LibraryFolder
  lib
    Library.lib
  include
    LibrarySolutionFolder
      Library.sln
      Library.ncb
      *.h
      *.cpp
      Debug
        *.obj
        Library.lib

Я включаю файлы * .h из файлов cpp моего приложения, и все компилируется нормально. Просто когда он ссылается, я получаю список всех .lib файлы, в которых ведется поиск, и Library.lib там нет, хотя он указан в каталогах VC ++. Как я могу получить это по ссылке? (И правильно ли я структурирую папки библиотеки?)

Ответы [ 5 ]

10 голосов
/ 22 октября 2008

О свойствах проекта:

Свойства конфигурации -> Линкер -> Ввод -> Дополнительные зависимости

Добавьте это туда.

Или, в вашем .h файле для библиотеки, добавьте:

#pragma comment(lib, "Library")

Это сделает это автоматически для вас.

3 голосов
/ 22 октября 2008

Каталоги VC ++ - это список местоположений каталогов, которые нужно искать во время компоновки. Это не список библиотек, которые нужно связать.

Вам необходимо добавить файл lib в Дополнительные зависимости поля Project Linker настроек.

1 голос
/ 22 октября 2008

Из командной строки:

cl / EHsc {objfiles} + / ссылка / LIBPATH: LibraryFolder Library.lib

Где {objfiles} + означает один или несколько файлов объектов или cpp

1 голос
/ 22 октября 2008

Чтобы создать ссылку на библиотеку, вы можете:

  • Перечислите его в Project-> Properties ...-> Linker, Input-> Дополнительные зависимости (Каталоги VC ++ позволяют использовать только имя .lib, а не полный путь),
  • Добавьте проект библиотеки в ваше приложение. Решение (В решении щелкните правой кнопкой мыши -> Добавить -> Существующий проект ...), затем используйте Проект -> Зависимости проекта ..., затем проверьте проект библиотеки (убедитесь, что проект приложения выбран в раскрывающемся списке). Вероятно, это лучший способ, если вы редактируете оба проекта, поскольку VC ++ перестроит библиотеку, если она изменилась, перед сборкой приложения.
  • Если вы уверены, что будете использовать только VC ++,

      #pragma comment(lib,"C:\\path\\to\\library.lib")`
    

    (Спасибо @Nils)

NB. Кажется очень странным иметь папку с библиотечным решением в каталоге include: который действительно предназначен для * .h (или других #include d файлов).

0 голосов
/ 22 октября 2008

VC не просто связывает библиотеку, если вы включаете заголовочный файл.

Вы должны указать компоновщику использовать библиотеку. По уважительным причинам: у вас уже есть тысячи библиотек в вашей папке библиотеки. Если бы MSVC приходилось искать все из них каждый раз, когда вы связываете свою программу, ей пришлось бы разбираться в сотнях мегабайт данных.

Это займет много времени, поэтому по умолчанию это не делается.

Для VC вы также можете дать подсказку компоновщику внутри вашего источника. Для этого вы добавляете следующую строку где-нибудь в свой исходный код (заголовок библиотеки может быть хорошим местом).

#pragma comment(lib,"c:\\path_to_library\\libname.lib")

Это не зависит от платформы, но является наиболее удобным способом автоматической привязки библиотеки к проекту с использованием MSVC.

Другой способ - просто добавить компоновщик в настройки проекта. Соответствующую информацию можно найти в настройках линкера вашего проекта. Не забудьте добавить lib в конфигурацию выпуска и отладки.

...