Компиляция и ссылки проекта C ++ с отсутствующей библиотекой - PullRequest
1 голос
/ 16 апреля 2011

Я собираю библиотеку C ++ с открытым исходным кодом, которая называется ITPP, в Visual Studio 2010. Она собирается успешно, и поэтому я пытаюсь собрать тестовую программу, которая поставляется вместе с ней, чтобы попробовать ее.Я получаю ошибки компоновки в тестовой программе, говоря, что первая созданная мной библиотека имеет некоторые ошибки компоновки в том, что она не может найти некоторые функции.

Я думаю, что знаю, какой библиотеки не хватает, но это как будто VS не волнует.

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

Спасибо,

mj

Ответы [ 2 ]

2 голосов
/ 16 апреля 2011

Будет создана статическая библиотека, даже если некоторые символы (функции / переменные), на которые есть ссылки, не доступны. Когда вы пытаетесь создать DLL или EXE, , а затем все ссылочные символы должны быть доступны - поэтому получаемые вами ошибки указывают на то, что эти символы действительно отсутствуют, и что ни ваша библиотека, ни какая-либо другая библиотека / источник не предоставили это.

2 голосов
/ 16 апреля 2011
  1. Правильно ли настроено тестовое приложение зависимости от библиотеки? Вы добавили каталог, в котором находится ваша новая библиотека, в путь поиска Visual Studios? (Инструменты-> Параметры-> Проекты и решения-> Каталоги VC ++). Содержит ли тестовое приложение список библиотек под опцией компоновщика «Дополнительные зависимости» (проверьте свойства проекта-> компоновщик-> Ввод-> Дополнительные зависимости). Или же, если тестовое приложение находится в том же решении, в разделе «Зависимости проекта» в тестовом приложении, будет ли проект lib указан в списке зависимостей.

  2. .lib - это библиотека импорта для библиотеки DLL? Библиотека импорта - это просто интерфейс для библиотеки DLL. Это заставляет вашу dll / exe автоматически загружать dll при запуске и удалять dll при выходе. Он также обеспечивает статический интерфейс для всех символов в DLL. Проблемы, которые могут возникнуть, включают, если символ в dll не был экспортирован, и, следовательно, не был помещен в lib импорта, вызывая ошибки компоновщика.

  3. В visual studio - более старая версия .lib, расположенная по тому же пути, что и ваш тестовый exe . Это иногда случается со мной, когда у меня есть .lib в моем проекте, и я установил его для копирования в какое-то место, где все мои общие библиотеки существуют в нескольких проектах. Иногда я собираю проект .libs в том же решении в тестовом приложении. В других случаях я буду создавать его вне тестового приложения. Когда вы создаете его в решении, библиотека копируется в тот же каталог, что и ваш тестовый исполняемый файл. Это первое место в пути поиска lib во время компоновки.

  4. Есть ли более старая копия библиотеки где-то еще в пути поиска компоновщика? Здесь может произойти то же самое, что и в пункте 3 выше.

  5. Если ничего не помогает, включите подробные ссылки , как указано здесь . Посмотрите, откуда Visual Studio импортирует библиотеку, посмотрите, соответствует ли она вашим ожиданиям.

...