Clang - "未找到符号"链接时

时间:2014-07-30 06:09:19

标签: c++ c clang

我正在尝试在clang中编译此源:

extern "C" void __declspec(dllexport) TEST(int num)
{
return;
}

问题是在链接上,clang报告“无法导出_TEST:符号未找到”

但是,我无法找到一种方法来防止诽谤名称

我一直在读这是铿锵的一个错误,但很难相信他们现在还没有解决它

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

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

它应该可以正常工作。