linker - 即使在静态库中也找不到符号
问题描述
我正在尝试从 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
. 这些不是同一个符号。
您可以-Wl,--no-demangle
在链接时使用来告诉链接器打印最终未定义的损坏(真实)符号,这样可以更清楚地表明您实际上没有该符号的定义。
可能该libSimGearCore.a
库是在没有-std=c++11
标志的情况下编译的,而需要该符号的代码是用它编译的。
推荐阅读
- xpath - Xpath importxml 谷歌电子表格
- python - 使用替换功能计算 Pandas 数据框列
- javascript - 用postMessage检查window.parent的起源有什么意义吗?
- javascript - 如何在浏览器控制台中检测按键事件?
- java - 使用流的 BlockRealMatrix 对象的平均对应行
- python-3.x - 动态 SQLAlchemy ORM 关系生成
- ruby-on-rails - 使用 sunspot_rails 在 solr 中为日期时间字段的输入字符串添加字段“created_at_d”时出错
- c# - Azure 平台/Dotnet 核心上的可靠图像处理
- c - fgets 存储来自文本文件的未知数据
- django - Django - Django 如何访问 sqlite 中的数据?