Visual Studio LNK1104 вместо LNK2019

Я не понимаю, как Visual Studio (2015 для меня) может определить имя файла.lib из файла заголовка.

Пример 1
я использую boost/asioнаписать простую программу для подключения через HTTP-запрос. Исходный файл включает в себя <boost/asio.hpp> на нем. Я тоже конфиг C/C++ / General / Additional Include Directories указать на папку Boost.
После этого я строю решение и сталкиваюсь с ошибкой:

Error LNK1104 cannot open file 'libboost_system-vc140-mt-gd-1_61.lib'

Но я не знаю, где Visual Studio находит имя libboost_system-vc140-mt-gd-1_61.lib от.
- Ищу в Linker / Input / Additional Dependencies / Edit... как для оценочного значения, так и для унаследованного значения не существует элемента с именем libboost_system-vc140-mt-gd-1_61.lib
- Я думаю, что в <boost/asio.hpp> каким-то образом он установил некоторую информацию для компилятора, что: "Если вам нужен файл lib, найдите libboost_system-vc140-mt-gd-1_61.lib, это моя реализация", но я ищу в папке boost, там нет исходный файл содержит "libboost_system-vc140-mt-gd-1_61.lib"
введите описание изображения здесь


Обычно, если какая-то функция объявлена ​​в заголовочном файле, а Visual Studio не может подать ее реализацию, LNK2019: unresolved external symbol ... будет бросить.
Тогда, если его реализация находится в abcxyz.lib файл, пользователь переходит к Linker / Input / Additional Dependencies и добавить abcxyz.lib, без указания папки, содержащей файл.lib в Linker / General / Additional Libary Directories, В этой ситуации Error LNK1104 cannot open file 'abcxyz.lib' будет брошен

Итак, почему в приведенном выше примере вместо ошибки LNK2019 встречается ошибка LNK1104?

Пример 2
Я работаю над проектом, который использует библиотеку OpenCV 2.4.10. В дистрибутиве они дают мне проект с исходным кодом, но без привязки ко мне библиотеки.
Затем я загружаю последнюю версию OpenCV 2.4.13 и настраиваю для проекта, такую ​​как дополнительная папка включения, дополнительная папка библиотеки, дополнительные зависимости (opencv_core2413.lib).
Все выглядит нормально, но когда я собираю проект, он выдает ошибку:

Error LNK1104 cannot open file 'opencv_core2410d.lib'

Я смотрел на Linker \ Input \ Additional Dependencies как для оценочного значения (содержит opencv_core2413.lib), так и для унаследованного значения, но нет элемента с именем "opencv_core2410d.lib".
Попробуйте поискать в другом общем списке свойств, который применим к проекту, но нет элемента записи с именем 'opencv_core2410d.lib'
Я хочу удалить эту запись, но не могу найти, где она находится

Итак, что здесь происходит? Кто-нибудь может объяснить для меня? Спасибо

2 ответа

Решение

В Visual Studio вы можете вставить в файл.obj запрос библиотеки, используя

#pragma comment( lib, "libname.lib" )

Это заставляет компоновщик искать libname в пути к библиотеке и гарантирует, что используется правильная библиотека.

Это можно отключить с помощью /nodefaultlib по ссылке.

В окнах реализация классов меняется между выпуском и отладкой (дополнительные элементы отслеживания добавляются в структуры при отладке).

Механизм реализации приближения и запуска CRT различается в зависимости от того, вызывается DllMain или нет.

Более современные визуальные студии также имеют

#pragma detect_mismatch( "name", "value")

Который помещает объявление в каждый объектный файл со своим значением для "значения". Это гарантирует, что если структуры изменяются между версиями или параметрами компиляции, они становятся несовместимыми друг с другом.

LNK1104 позволяет узнать, что вам нужно установить местоположение библиотеки в Library Directories,

boost::asio зависит от boost::system для сообщений об ошибках. boost::system не библиотека только для заголовков.

Вам нужно добавить местоположение boost библиотеки в Library Directories под VC++ Directories на страницах свойств вашего решения.

Если вы не построили boost библиотек пока нет, есть статья, как это сделать здесь, или вы можете скачать ее здесь.

Добавление местоположения OpenCV библиотеки на страницах свойств вашего решения должны исправить Example 2,

Другие вопросы по тегам