首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用LINK1181在VS17上链接库失败

用LINK1181在VS17上链接库失败
EN

Stack Overflow用户
提问于 2019-10-29 09:55:55
回答 3查看 415关注 0票数 1

我正在尝试在我的项目中使用ADTF流库。当我包含库时,我会得到LNK1181错误。库附带了头文件、库文件和dll文件。

我已经添加了C/C++ ->中的路径,一般的->附加包含目录。

此外,我还在链接器->输入->附加依赖项中添加了库。

这里也是错误截图。

更新:我已经将dll和lib的位置更改为我的项目路径,并再次包含它。它现在并没有抱怨解放组织本身。现在我得到了一个错误LNK2001。我相信这也是一个链接错误。

在这里一切都变糟了!

更新2:在我看到构建的完整日志后的。这看起来,我想这意味着链接器找不到我的库。是那么回事吗?

主要应用程序代码如下:

代码语言:javascript
复制
#include "pch.h"
#include <iostream>
#include "adtf_streaming.h"
using namespace adtfstreaming;

int main()
{
    std::cout << "Hello World!\n"; 
    IADTFFileReader *pFileReader = IADTFFileReader::Create();

}

而试图读取/导入我的lib的头文件是

代码语言:javascript
复制
#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_
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-05 09:22:02

我找到了这个问题的答案。问题的组合。

这个库只支持0x86机器。我再次构建了它来支持0x64,而且它起了作用。

P.S.它也在Visual 2017上工作,不幸的是,文档很差,缺乏信息。

票数 0
EN

Stack Overflow用户

发布于 2019-10-29 11:48:35

您需要在Linker属性中指定其他库目录,以设置库文件所在的目录。您不需要在附加的依赖项中包含lib,因为在调试中编译应用程序时在lib头文件中使用的是#pragma comment( lib, "adtfstreamingD_290.lib" ),在发行版中编译时是#pragma comment( lib, "adtfstreaming_290.lib" )。但是,您需要指定这些库目录中的库库在哪里。

如果您看到库包含文件,您将看到,如果定义了STREAMINGLIB_EXPORTS宏,则使用DOEXPORT修饰符的所有函数都是导出函数#define DOEXPORT __declspec( dllexport )。但是,如果未定义此宏,则相同的函数是导入函数。因为dll需要指定这个函数是导出函数,所以在dll代码中有人定义了这个宏。因为在您的代码中没有(也不能定义)定义这个宏,所以这个函数是导入的函数。

票数 2
EN

Stack Overflow用户

发布于 2019-10-29 20:12:09

ADTF流媒体库需要VS 2010并且与其他版本不兼容!因此,请确保与v100构建工具一起使用它。或更改为ADTF文件库a.k.a。IFHD,这是v141兼容的后续,并与ADTF 2.x和ADTF 3.x以及工作。请注意,Lib完全是开源许可的。有关一些概述,请参见ADTF .dat trace file reader

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58605032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档