如何在MSVC链接器.def文件中指定含空格的路径?
问题:MSVC链接器.def文件转发导出含空格路径的DLL失败
我尝试给MSVC链接器使用如下.def文件,实现DLL的转发导出功能:
EXPORTS SomeExport=C:\Program Files\Directory\somedll.SomeExport @1
目标是编译一个DLL,将SomeExport函数转发到路径包含空格的另一DLL,但链接器解析该.def文件时抛出错误:
fatal error LNK1118: syntax error in the instruction 'Files\Directory\somedll.SomeExport
我试过用双引号、三引号包裹转发DLL的路径,也移除了导出定义中的序数@1,结果都无法解决问题。请问是否有办法通过.def文件配合MSVC链接器实现这一需求?
解决方案
使用Windows短路径(8.3格式)
Windows系统会为带空格的目录自动生成不含空格的短路径(通常以~1这类后缀结尾)。你可以通过命令行执行dir /x "C:\Program Files\Directory",获取目标DLL所在目录的短路径,然后替换.def文件中的路径:EXPORTS SomeExport=C:\PROGRA~1\DIRECT~1\somedll.SomeExport @1这种方式能让链接器正常解析路径,无需修改其他配置。
改用代码内的链接器指令替代.def文件
放弃.def文件,在C/C++代码中直接通过#pragma comment声明转发导出,此时可以用引号包裹带空格的路径(注意转义双引号):#pragma comment(linker, "/export:SomeExport=\"C:\\Program Files\\Directory\\somedll.dll\".SomeExport,@1")链接器能正确识别这种带引号的路径格式,不会因空格触发语法错误。
内容的提问来源于stack exchange,提问作者Kurosh D.
相关产品推荐
相关产品推荐

