找不到静态链接(lib文件)的答案,但只发现DLL ...
我有一个静态lib
,其中我需要调用的函数没有装饰(FT_CreateDeviceInfoList
)。但链接器正在寻找一个装饰名称(_FT_CreateDeviceInfoList@4
)。
我不能改变lib
,因为它是第三方。我显然有头文件(ftd2xx.h
,从the x64 version下载this website)
正如我所理解的那样,它应该构建良好而无需更改,因为它是提供给全世界的第三方库...
我在这里错过了什么?如何强制链接器查找未装饰的名称?
傻我......在构建选项中将平台更改为x64,但现在我又出现了另一个错误:
Error LNK2019 unresolved external symbol __imp_printf referenced in function "int __cdecl DumpDeviceWithInfo(void *,struct _SP_DEVINFO_DATA *,char const *)" (?DumpDeviceWithInfo@@YAHPEAXPEAU_SP_DEVINFO_DATA@@PEBD@Z) poc c:\prj\poc\poc\ftd2xx.lib(devcon.obj) 1
但我不明白为什么更改为x64会更改装饰/修改选项。
你需要添加FTD2XX_STATIC
定义。如果你看一下ftd2xx.h标题,你可以看到:
#elif defined(FTD2XX_STATIC)
// Avoid decorations when linking statically to D2XX.
编辑:
用__stdcall
声明的函数以内部名称获取那些装饰器(参见http://wyw.dcweb.cn/stdcall.htm)。将构建更改为x64更改了调用约定 - x64处理器上的编译器会忽略__stdcall
。
要将错误与__imp_printf
链接,请尝试使用legacy_stdio_definitions.lib进行链接 - 请参阅ftd2xx static library link error