Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linker 在静态库中找不到符号,即使它们存在_Linker_Static Libraries_Linker Errors_Symbols_Ld - Fatal编程技术网

Linker 在静态库中找不到符号,即使它们存在

Linker 在静态库中找不到符号,即使它们存在,linker,static-libraries,linker-errors,symbols,ld,Linker,Static Libraries,Linker Errors,Symbols,Ld,我正在尝试从FlightGear项目构建TerraGear,它需要链接时从静态库libSimGearBucket中获得多个符号,例如SGBucket::gen_base_pathld在以下情况下失败 警告:未定义对»SGBucket::gen_base_path[abi:cxx11]()常量的引用 这些在库中定义: $nm libSimGearCore.a | grep gen_base_路径 0000000000000 1F0吨锌K8SGBucket13Gen_基地 ZNK8SGBucket

我正在尝试从FlightGear项目构建TerraGear,它需要链接时从静态库
libSimGearBucket
中获得多个符号,例如
SGBucket::gen_base_path
<代码>ld在以下情况下失败

警告:未定义对»SGBucket::gen_base_path[abi:cxx11]()常量的引用
这些在库中定义:

$nm libSimGearCore.a | grep gen_base_路径
0000000000000 1F0吨锌K8SGBucket13Gen_基地
ZNK8SGBucket13gen_base_pathEv
ZNK8SGBucket13gen_base_pathEv
我确保库链接到需要符号的程序。怎么了?

您需要的函数是
SGBucket::gen_base_path[abi:cx11]()const

您拥有的函数是
SGBucket::gen\u base\u path()const
。这些符号不一样

您可以在链接时使用
-Wl,--no-demangle
告诉链接器打印最终未定义的损坏(真实)符号,这将更清楚地表明您实际上没有该符号的定义


可能是
libSimGearCore.a
库在编译时没有
-std=c++11
标志,而需要符号的代码是用它编译的。

您能解释为什么符号在nm的输出中出现三次吗?两倍于U,一倍于T。这是正常的。运行
nm-A libSimGearCore.A | grep gen_base_path
就会明白为什么会发生这种情况。您能否告诉我如何解决这个问题:不带-D的nm显示所有符号,而带-D的nm不显示任何符号?我是否必须重新编译所有内容并添加一些开关,或者…@程序员这也是正常的:
nm-D
显示动态链接器将解释的符号。存档库中没有这样的符号,它们只出现在可执行文件和共享库中。