无法在Mac OS X上使用GCC的-static-libgcc与DYLIB库一起工作

时间:2012-03-29 11:41:16

标签: macos gcc compiler-construction ffmpeg shared-libraries

我已经将GCC 4.6.3安装到Mac系统上的非系统路径中,并且工作正常。但是,GCC希望将libgcc中的代码用于我编译的所有二进制文件,并且运行otool -L表明这些编译的程序在GCC的安装路径中查找libgcc_s.1.dylib。我可以通过传递-static-libgcc来覆盖它,它只是编译二进制文件中所需的东西,这很好。问题是这似乎只适用于可执行文件,而不是共享库。如果我使用GCC编译一些第三方库我想在我的一个程序中用作.dylib,这些库仍然在本地GCC安装路径中查找libgcc_s.1.dylib,即使我指定-static -libgcc!毋庸置疑,这是一个问题,因为无法保证这些库在其他系统上运行时会找到libgcc。

我用ffmpeg尝试了这个。如果我查看config.log,肯定会使用-static-libgcc。 GCC并没有将libgcc静态链接到生成的dylib。我甚至尝试过-nostdlib,-nostartfiles和-nodefaultlibs选项,但它们被忽略了。再次,我检查了config.log,他们肯定在那里!

1 个答案:

答案 0 :(得分:2)

我认为这与在共享库边界中抛出异常有关。这个page说:

  

应用程序应该使用多种情况   共享libgcc而不是静态版本。其中最常见的   当应用程序希望抛出并捕获异常时   不同的共享库。在那种情况下,每个库都为   以及应用程序本身应该使用共享的libgcc。

     

因此,G ++和GCJ驱动程序会自动添加-shared-libgcc   无论何时构建共享库或主可执行文件,因为C ++   和Java程序通常使用异常,所以这是正确的   要做。

其余部分提供了一种可能的解决方法(显示),即使用GCC驱动程序链接您的共享库,但是如果静态链接库抛出异常,您可能得到分段违规。