Сбой при связывании библиотеки с LINK1181 на VS17
Я пытаюсь использовать потоковую библиотеку ADTF в своем проекте. Когда я включаю библиотеку, я получаю ошибку LNK1181. Библиотека поставляется с заголовками, файлами lib и файлами dll.
Я добавил путь внутри C/C++ -> Общие -> Дополнительные подключаемые каталоги.
Кроме того, я добавил библиотеку в Linker -> Input -> Additional Dependencies.
Вот также скриншот ошибки.
Обновление: я изменил расположение dll и библиотек на свой путь к проекту и снова включил его. На саму библиотеку теперь не жалуется. Теперь я получаю сообщение об ошибке LNK2001. Я считаю, что это тоже ошибка компоновщика.
И вот где все идет не так!
Обновление 2: после того, как я увижу полный журнал сборки. Кажется, я думаю, это означает, что компоновщик не может найти мою библиотеку. Это правильно?
Основной код приложения такой:
#include "pch.h"
#include <iostream>
#include "adtf_streaming.h"
using namespace adtfstreaming;
int main()
{
std::cout << "Hello World!\n";
IADTFFileReader *pFileReader = IADTFFileReader::Create();
}
и файл заголовка, который пытается прочитать / импортировать мою библиотеку,
#ifndef _ADTF_STREAMING_LIBRARY_DLL_
#define _ADTF_STREAMING_LIBRARY_DLL_
#ifdef WIN32
#ifdef STREAMINGLIB_EXPORTS
#pragma message ("Create ADTF Streaming Library ")
// export symbols
#define DOEXPORT __declspec( dllexport )
#else
#pragma message ("Use dynamic ADTF Streaming Library ")
#ifdef _DEBUG
#pragma comment( lib, "adtfstreamingD_290.lib" )
#else
#pragma comment( lib, "adtfstreaming_290.lib" )
#endif
#define DOEXPORT __declspec( dllimport )
#endif
#else
#ifdef STREAMINGLIB_EXPORTS
#define DOEXPORT __attribute__ ((visibility("default")))
#else
#pragma comment( lib, "adtfstreaming_290.lib" )
#define DOEXPORT __declspec( dllimport )
#endif
#endif
//standard includes
#include <stdlib.h>
#include <string.h>
//adtf base types and errors
#include "adtf_base_ref.h"
//streaming lib version
#include "adtf_streaming_version.h"
//adtf streaming lib package headers
#include "adtf_streaming_pkg.h"
#endif //_ADTF_STREAMING_LIBRARY_DLL_
3 ответа
Я нашел ответ на проблему. Что ж, сочетание проблем.
Библиотека была создана для поддержки только машин 0x86. Я снова построил его для поддержки 0x64, и он сработал.
PS Он работал и на Visual Studio 2017, к сожалению, документация плохая и не хватает информации.
Вам необходимо указать дополнительные каталоги библиотеки в свойствах компоновщика, чтобы указать каталог, в котором у вас есть файл lib. Вам не нужно включать библиотеки в дополнительные зависимости, потому что вы делаете это в файле заголовка lib.#pragma comment( lib, "adtfstreamingD_290.lib" )
когда вы компилируете приложение в отладке или #pragma comment( lib, "adtfstreaming_290.lib" )
когда вы компилируете в релизе. Но вам нужно указать, где эти библиотеки в дополнительных каталогах библиотек.
Если вы видите включаемый файл lib, вы видите, что если макрос STREAMINGLIB_EXPORTS определен, все функции с модификатором DOEXPORT являются экспортируемыми функциями. #define DOEXPORT __declspec( dllexport )
. Но если этот макрос не определен#define DOEXPORT __declspec( dllimport )
, те же функции являются импортированными функциями. Это потому, что dll должна указывать, что эти функции являются экспортируемыми функциями, поэтому в коде dll кто-то определил этот макрос. Поскольку в вашем коде вы не определяли (и не должны) определять этот макрос, эти функции являются импортированными функциями.
Библиотека потоковой передачи ADTF требует VS 2010 и несовместима с другими версиями! Поэтому обязательно используйте его с инструментами сборки v100. Или перейдите на библиотеку файлов ADTF, также известную как IFHD, которая является преемником, совместимым с v141, и также работает с ADTF 2.x и ADTF 3.x. Обратите внимание, что Lib поставляется с полностью открытым исходным кодом. См. Обзор файла трассировки ADTF.dat.