【发布时间】:2018-11-16 21:38:07
【问题描述】:
我在运行时遇到未定义符号错误,当我在相关库中查找符号时,我得到了结果:
nm -C -D /home/farmer/anaconda3/envs/general/lib/python3.6/site-packages/pyscannerbit/libScannerBitCAPI.so | grep empty_
U YAML::detail::node_data::empty_scalar[abi:cxx11]
00000000002b5860 T YAML::detail::node_data::empty_scalar[abi:cxx11]()
但这怎么可能呢?该符号既未定义,也在库中?什么?或者这些实际上是不同的符号?修改后的名称确实略有不同:
nm -D /home/farmer/anaconda3/envs/general/lib/python3.6/site-packages/pyscannerbit/libScannerBitCAPI.so | grep empty_
U _ZN4YAML6detail9node_data12empty_scalarB5cxx11E
00000000002b5860 T _ZN4YAML6detail9node_data12empty_scalarB5cxx11Ev
这有意义吗?
【问题讨论】:
-
请注意,解构后的名称也略有不同。
-
对,我提到过。所以他们不一样?但这似乎仍然很奇怪,这是怎么允许的?名称同时用于类函数和变量(如果是这样的话)不是编译器错误吗?
-
啊,好吧,确实它们可能不能同时存在,但似乎有两个版本的外部库,一个在编译期间使用,另一个在链接时使用。这个符号在两个版本之间从一个变量变成了一个函数。所以在编译时构建知道它需要一个函数,但在链接过程中变量版本被内置到我的库中。
标签: c++ undefined-symbol nm