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

Deploy OSX application compiled using GCC 4.6

本文关键字:编译 OSX 应用程序 GCC 部署      更新时间:2023-10-16

我正试图在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)上时,它就不起作用了。

它返回以下错误:

dyld:惰性符号绑定失败:未找到符号:__ZNSo9_M_insertImEERSoT_参考自:/用户/zu/桌面/OgreApp.app/Contents/MacOS/OgreApp应在中:/usr/lib/libstdc++.6.dylib

dyld:找不到符号:__ZNSo9_M_insertImEERSoT_参考自:/用户/zu/桌面/OgreApp.app/Contents/MacOS/OgreApp应在中:/usr/lib/libstdc++.6.dylib

我知道该程序需要GCC 4.6.0的libstdc++.6.dylib,因为该文件包含C++0x函数(尽管我当前的测试没有使用任何C++0x功能),而不是OS-X系统中通常包含的标准libstdc++6.dylib。

所以我尝试了以下方法:

  • 指定-isysroot/Developer/SDKs/MacOSX10.5.sdk-mmacosx版本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(Libraries文件夹中有一份gcc 4.6.0 libstdc++.6.dylib的副本),这是我之前问题的答案。但错误依然存在。

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

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

有人能解释我应该如何在另一台安装了旧版本的Mac计算机上部署用非标准libstdc++创建的应用程序吗?

Mac OS X 10.5不包含GCC标准库的兼容副本。如果你想让你的代码在Leopard上运行,你必须修改它,使其在旧版本的GCC下编译,或者你必须……嗯,实际上这是你唯一的选择。