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 - 链接时“找不到符号”的主要内容,如果未能解决你的问题,请参考以下文章

写了一段java程序,编译时提示找不到符号,请问该怎么修改

java 枚举 找不到符号

java package找不到符号

在架构 + 链接器命令中找不到符号失败,退出代码为 1

maven编译时候提示找不到符号怎么办

java里显示找不到符号?