c++ - Debian gcc 不良行为
问题描述
我正在创建一个具有静态库依赖项的 gcc 共享库。
我编译静态库的部分如下:
gcc -c -m64 -O2 -fPIC -std=c99 -Wall ms*.c //there are 10 C files, no warnings
接下来我创建一个静态库:
ar rc static_lib.a ms*.o
接下来我为我的程序编译部件如下:
g++ -c -m64 -O2 -fPIC -std=c++14 -Wall ab*.cpp //there are 5 C++ files, just -Wunused-variable warnings
然后我创建一个共享库,如下所示:
g++ -shared -g -Wall ab*.o static_lib.a -o shared_lib.so
在正常情况下,这个 shared_lib.so 将由一个使用外部函数接口的 Ruby 程序调用。如果我在 ubuntu 或 mac(.dylib) 上执行此操作没有问题,但如果我在 debian 拉伸上尝试此操作,我会收到与静态库相关的错误,好像配置设置不正确。如果我在没有外部函数接口的情况下运行应用程序,例如创建一个测试器并使用 cpp 文件 main 函数运行如下:
> g++ -o library_test ab*.o static_lib.a
> ./library_test
没有问题!
我的问题是这里可能缺少用于创建共享库的哪种配置,以免出现这种不良行为。尤其是在 debian 拉伸 9.5 上!或者有没有办法让我理解共享库中是否存在问题。
解决方案
从评论中,您指出问题出在#define
. 这些是预处理器指令。库用于链接器。
您可能会感到困惑,因为g++
它确实包含预处理器阶段,并且可能会根据请求的输出调用链接器。尽管如此,还是g++
遵循 C++ 语言规则。
推荐阅读
- node.js - MongoDb 地理定位
- c - fgets + stdin :是否可以跳过前 2 个字符?
- python-3.x - 如何将 POS 标签特征与相关词向量相结合,以从预训练的 gensim word2vec 中获取词,并在 keras 的嵌入层中使用
- mysql - mysql服务器每晚断线,请问如何解决?
- jquery - 如何在 Angular 1.x 链接函数中获取元素的其他事件处理程序
- mysql - GROUP_CONCAT 以多对多关系返回对象数组
- c++ - 给定一个大小为“n”的数组,在每个大小为“k”的窗口中找到最大元素并将它们全部相加,然后打印总和作为输出
- python - 将嵌套的 Python 字典写入 SQL 表
- android - exoplayer setPlayWhenReady() 为什么不工作?
- python-3.x - TF1 训练中使用的 Numpy 数组——Keras 在 TF2 中的准确率要低得多