Clang++ 在使用 -lstdc++ 时尽管有外部"C",但名称重整
Clang++ does name mangling inspite of extern "C" when using -lstdc++
我使用clang++构建了一个共享对象。主要函数位于extern"C"块中。该建筑很好,我可以使用JNA调用这些函数。
当我添加了标志"-lstdc++"(用于使用一些c++ 11特性)-我得到了运行时错误:
undefined symbol: _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm
I run
nm target/classes/linux-x86-64/libCloudCryptoLibrary.so |grep init
则得到
U _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm
U _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEmc
0000000000004860 T _init
0000000000024360 T init
当我移除这个标志,并再次运行nm时,我得到:
U _ZNKSt5ctypeIcE13_M_widen_initEv@@GLIBCXX_3.4.11
000000000026b920 b _ZStL8__ioinit
000000000026b9e0 b _ZStL8__ioinit
0000000000004508 T _init
0000000000021000 T init
我能做些什么来纠正它?
我找到了一个解决方案:我在外部"C"块中有一个名为"init"的函数(正如您可以看到的"0000000000021000 T init"行)。我把它重命名为"initMyClass",问题消失了。
相关文章:
- 在函数内部的声明中初始化数组,并在外部使用它
- 使外部项目可用于find_package CMake
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- C++:来自外部文件的Trivia
- 从函数角度看ID到文件路径的内部与外部映射
- C++:将外部库链接到dll库
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 节俭并发:未解决的外部问题
- 如何在c++中从git建立外部库
- 未解析的外部符号_MsiLocateComponentW@12.
- 如何使用对C函数和类对象的外部调用来处理C++头文件
- 具有外部"c"和程序集的未定义函数
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 在C++中使用 gRPC 时未解析的外部符号
- 在类函数中初始化外部作用域变量
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 调用外部函数,无法指定类型 C++/MVS
- 同时具有"外部"和"内联"说明符的变量
- Clang++ 在使用 -lstdc++ 时尽管有外部"C",但名称重整