Visual Studio为DLL函数调用添加__imp_前缀导致链接失败如何解决
解决FrameMaker FDK DLL函数链接时
__imp_前缀错误问题 出现__imp_前缀的根本原因是MSVC编译器将你调用的FDK DLL函数识别为动态导入符号,自动为符号名添加此前缀,但FrameMaker官方DLL导出的函数均为原始名称,无此前缀,因此链接器无法匹配符号。按以下顺序修改VS配置即可解决:
- 配置预处理器宏:找到FDK核心头文件
fapi.h对应的控制宏,在项目中添加FMI_DLL预处理器定义。该宏是FDK官方用来控制函数导入导出修饰的开关,未定义时头文件会自动给函数添加__declspec(dllimport)修饰,导致编译器生成带__imp_前缀的符号。
操作路径:项目属性 → C/C++ → 预处理器 → 预处理器定义,新增FMI_DLL条目。 - 统一调用约定:FrameMaker FDK的导出函数统一使用
__cdeclC调用约定,需要确保项目调用约定和DLL导出规则一致。
操作路径:项目属性 → C/C++ → 高级 → 调用约定,选择__cdecl(/Gd)。 - 配置链接器输入:链接阶段需要关联FDK提供的导入库
.lib文件,而非仅添加DLL存放目录。一般FDK安装目录下的lib文件夹内有对应版本的fmi.lib,将其添加到链接器附加依赖项即可。
操作路径:项目属性 → 链接器 → 输入 → 附加依赖项,添加fmi.lib完整路径;也可以先将FDK的lib目录加入「附加库目录」,再直接填写fmi.lib。
修改完成后执行清理解决方案、重新生成操作,即可解决带__imp_前缀的未解析符号错误。
内容的提问来源于stack exchange,提问作者4everJang
相关产品推荐
相关产品推荐

