在静态库中找不到的符号,即使它们在那里
symbols not found in static library even though they are there
我正在尝试从 FlightGear 项目构建 TerraGear,它在链接时需要来自静态库 libSimGearBucket
的多个符号,例如 SGBucket::gen_base_path
。 ld
失败
warning: undefined reference to »SGBucket::gen_base_path[abi:cxx11]() const
库中定义了这些:
$ nm libSimGearCore.a | grep gen_base_path
00000000000001f0 T _ZNK8SGBucket13gen_base_pathEv
U _ZNK8SGBucket13gen_base_pathEv
U _ZNK8SGBucket13gen_base_pathEv
我三重确保库 是 链接到需要符号的程序。怎么了?
您需要的功能是SGBucket::gen_base_path[abi:cxx11]() const
。
您拥有的功能是SGBucket::gen_base_path() const
。这些不是同一个符号。
您可以在 link 时使用 -Wl,--no-demangle
来告诉 linker 打印 mangled (real) symbol that ends up undefined ,这将使您更清楚地知道您实际上没有该符号的定义。
可能 libSimGearCore.a
库是在没有 -std=c++11
标志的情况下编译的,而需要该符号的代码是用它编译的。
我正在尝试从 FlightGear 项目构建 TerraGear,它在链接时需要来自静态库 libSimGearBucket
的多个符号,例如 SGBucket::gen_base_path
。 ld
失败
warning: undefined reference to »SGBucket::gen_base_path[abi:cxx11]() const
库中定义了这些:
$ nm libSimGearCore.a | grep gen_base_path
00000000000001f0 T _ZNK8SGBucket13gen_base_pathEv
U _ZNK8SGBucket13gen_base_pathEv
U _ZNK8SGBucket13gen_base_pathEv
我三重确保库 是 链接到需要符号的程序。怎么了?
您需要的功能是SGBucket::gen_base_path[abi:cxx11]() const
。
您拥有的功能是SGBucket::gen_base_path() const
。这些不是同一个符号。
您可以在 link 时使用 -Wl,--no-demangle
来告诉 linker 打印 mangled (real) symbol that ends up undefined ,这将使您更清楚地知道您实际上没有该符号的定义。
可能 libSimGearCore.a
库是在没有 -std=c++11
标志的情况下编译的,而需要该符号的代码是用它编译的。