如何强制链接器在lib文件中查找未装饰的名称?

问题描述 投票:0回答:1

找不到静态链接(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会更改装饰/修改选项。

c++ windows visual-studio-2017 static-libraries static-linking
1个回答
0
投票

你需要添加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

© www.soinside.com 2019 - 2024. All rights reserved.