【发布时间】:2019-09-05 20:19:03
【问题描述】:
在项目环境中,我想将共享对象的源文件从 c 更改为 cpp。我确保也更改了它在 CMakeLists.txt 中的条目:
add_library(*name* SHARED *mysource*.cpp)
target_link_libraries(*name as target* *item*)
构建过程运行良好。不幸的是,当我尝试使用它时,我收到一个错误,即找不到 .so 中的函数。
使用 objdump -T 检查共享对象内部的动态符号表后,我发现符号的名称与源文件中的名称不同。 例如
int sr_plugin_init_cb(sr_session_ctx_t *session, void **private_ctx);
变成
_Z17sr_plugin_init_cbP16sr_session_ctx_sPPv
在我的 Visual Studio 代码中,它说它可以构建对象并正确链接共享库,并且它还在输出中从 C 更改为 CXX,即使某些代码仅是 C++,也没有给我任何错误。
为什么符号名称会改变?
【问题讨论】:
-
因为名字变了
-
这似乎是name mangling。
标签: c++ cmake shared-objects