Clang - 链接时“找不到符号”
Posted
技术标签:
【中文标题】Clang - 链接时“找不到符号”【英文标题】:Clang - "symbol not found" when linking 【发布时间】:2014-07-30 06:09:18 【问题描述】:我正在尝试用 clang 编译这个源代码:
extern "C" void __declspec(dllexport) TEST(int num)
return;
问题是在链接上,clang 报告“无法导出 _TEST:未找到符号”
但是,我找不到防止 clang 破坏名称的方法
我一直在读到这是 clang 中的一个错误,但很难相信他们现在还没有修复它
有什么想法吗?
【问题讨论】:
你用什么操作系统编译?我问是因为我注意到在 Mac OS X 及其 Mach-O ABI 上,所有符号都以_
开头,而相同的编译器在 Linux 及其 ELF 格式上省略了 _
。
【参考方案1】:
clang生成的汇编文件.drectve
部分内容包含:
.section .drectve,"r"
.ascii " -export:_TEST"
虽然它应该和 gcc 一样:
.section .drectve,"r"
.ascii " -export:TEST"
您可以通过删除__declspec(dllexport)
并创建一个包含您要导出的符号的文件file.s
来解决此问题,如下所示:
.section .drectve,"r"
# list of symbols you want to export
.ascii " -export:TEST"
最后留一个空行,这里不显示。
如果您想导出符号,请添加 .ascii " -export:SYMBOL_NAME"
。现在你可以编译它了:
clang++ file.cpp file.s -shared -o file.dll
它应该可以正常工作。
【讨论】:
工作。非常感谢先生。以上是关于Clang - 链接时“找不到符号”的主要内容,如果未能解决你的问题,请参考以下文章