部署使用GCC 4.6编译的OSX应用程序

时间:2011-06-22 17:31:34

标签: c++ macos gcc libstdc++

我正在尝试在Mac OS-X上移植我的项目。

当我使用C ++ 0X开发我的项目时,我需要一个比Xcode(甚至是Xcode4)提供的更新版本的GCC,所以我在Snow Leopards Mac上编译了GCC 4.6。

我的项目编译得很好,它确实在我编译它的计算机上启动(OS-X 10.6.7)但是当我将它传输到我的MacBook(OS-X 10.5.8)时它不起作用。< / p>

它返回以下错误:

  

dyld:懒惰符号绑定失败:   未找到符号:   __ZNSo9_M_insertImEERSoT_参考自:   /Users/zu/Desktop/OgreApp.app/Contents/MacOS/OgreApp   期望:   / usr / lib中/的libstdc ++。6.dylib

     

dyld:未找到符号:   __ZNSo9_M_insertImEERSoT_参考自:   /Users/zu/Desktop/OgreApp.app/Contents/MacOS/OgreApp   期望:   / usr / lib中/的libstdc ++。6.dylib

据我所知,程序需要gst 4.6.0的libstdc ++。6.dylib,因为这个文件包含C ++ 0x函数(尽管我当前的测试不使用任何C ++ 0x函数)而不是标准的libstdc ++。6.dylib通常包含在OS-X系统中。

所以我尝试了以下内容:

  • 指定 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min = 10.5 ,以确保与OS-X 10.5的向后兼容性。但错误仍然相同。

  • 使用 otool -L 验证libstdc ++。6.dylib路径,并使用 install_name_tool -change / opt / local / lib / gcc46 / libstdc ++更改共享库路径。 6.dylib @executable_path /../ Libraries / libstdc ++。6.dylib OgreApp (带有gcc 4.6.0 libstdc ++。6.dylib在Libraries文件夹中的副本),建议为answer of my previous question。但错误仍然相同。

  • 使用 -static-libgcc-static-libstdc ++ 静态链接libstdc ++和libgcc。但它仍然会返回相同的错误。

由于我的程序使用Ogre框架,我将上述操作应用于嵌入在Ogre.framework中的Ogre可执行文件,但它不会改变任何内容。

有没有人可以解释我应该如何在安装了旧版本的另一台Mac计算机上部署使用非标准libstdc ++创建的应用程序(我想问题是运行Snow Leopard的计算机与程序一样使用GCC 4.6.0 libstdc ++)?

1 个答案:

答案 0 :(得分:0)

Mac OS X 10.5不包含GCC标准库的兼容副本。如果你想让你的代码在Leopard上运行,你必须修改它以在旧版本的GCC下编译,否则你必须......好吧,这真的是你唯一的选择。