Debian gcc 不良行为
Debian gcc undesirable behaviour
我正在创建一个具有静态库依赖项的 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 上尝试此操作,我会收到与静态库相关的错误 [=32] =] 好像配置设置不正确。如果我运行应用程序没有外部函数接口,比如创建一个tester和运行cpp文件主要函数如下:
> g++ -o library_test ab*.o static_lib.a
> ./library_test
没有问题!
我的问题是,此处可能缺少用于创建共享库的哪种配置,以免出现不良行为。特别是在 debian stretch 9.5 上!
或者有什么方法可以让我理解共享库是否有问题。
根据评论,您指出问题出在 #define
。这些是 预处理器 指令。库用于 链接器 。
您可能会感到困惑,因为 g++
确实包含预处理器阶段,并且可能会根据请求的输出调用链接器。尽管如此,g++
仍遵循 C++ 语言规则。
我正在创建一个具有静态库依赖项的 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 上尝试此操作,我会收到与静态库相关的错误 [=32] =] 好像配置设置不正确。如果我运行应用程序没有外部函数接口,比如创建一个tester和运行cpp文件主要函数如下:
> g++ -o library_test ab*.o static_lib.a
> ./library_test
没有问题!
我的问题是,此处可能缺少用于创建共享库的哪种配置,以免出现不良行为。特别是在 debian stretch 9.5 上! 或者有什么方法可以让我理解共享库是否有问题。
根据评论,您指出问题出在 #define
。这些是 预处理器 指令。库用于 链接器 。
您可能会感到困惑,因为 g++
确实包含预处理器阶段,并且可能会根据请求的输出调用链接器。尽管如此,g++
仍遵循 C++ 语言规则。