Debian GCC不良行为

时间:2018-11-07 09:58:54

标签: c++ shared-libraries c++14 static-libraries debian-stretch

我正在创建一个具有静态库依赖项的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 Stretch上尝试此操作,则会收到与静态库相关的错误 ,好像配置没有正确设置一样。如果我运行的应用程序没有外部功能接口,例如创建测试器并使用cpp文件主要功能运行,如下所示:

> g++ -o library_test ab*.o static_lib.a
> ./library_test

没问题!

我的问题是,在此处创建共享库可能会丢失哪种配置,以免产生不良行为。特别是在Debian 9.5上! 还是有一种方法可以让我了解共享库是否存在问题。

1 个答案:

答案 0 :(得分:0)

从注释中可以看出问题出在#define上。这些是预处理器指令。库用于链接器

您可能会感到困惑,因为g++确实包括预处理阶段,并且可能会根据请求的输出来调用链接器。尽管如此,g++仍遵循C ++语言规则。