编译为共享对象时,我的代码段错误,作为独立二进制文件工作正常

时间:2016-09-28 08:55:56

标签: c++ shared-libraries

我有一个棘手的C ++问题。我有一个庞大而复杂的代码,它被编译成一个Linux共享对象。当它通过一个特定的代码路径时,就会出现段错误。 (基本上,其中一个STL迭代器似乎指向它应该的位置的一些字节。)但是,如果我display将所有代码放入一个巨大的源文件并将其编译成一个独立的程序,那么一切效果很好。

我如何开始来调试它?问题似乎不是源级问题,但(我猜?)某种奇怪的链接器问题。我完全迷失了。 (我以为STL都是编译时的东西......)

如果重要,那么SO就像这样编译:

#include

独立包含一个带有一堆g++ -m64 -c -D_CONSOLE -D__UNICODE__ -fPIC -O0 -g -D_DEBUG -D_GLIBCXX_DEBUG <name> -o <name>.o g++ -m64 -shared -o MangoLib.so <objects...> 指令的小驱动程序,如下所示:

#include

我不我在这里做错了什么......但每次都是SO段错误,所以我想我做了?我现在不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

我将开始检查全局变量和静态初始化器的用法。发生这些事情的顺序尚未明确定义AFAIK。每个全局变量或静态初始化程序比#34更复杂;只需用0位填充此内存即可。应该怀疑。几个静态初始化器相互引用基本上是不行的。