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

标签 c++ macos gcc libstdc++

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

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

我的项目确实可以正常编译,它也可以在我编译它的计算机 (OS-X 10.6.7) 上启动,但是当我将它传输到我的 MacBook (OS-X 10.5.8) 时它不起作用。

它返回以下错误:

dyld: lazy symbol binding failed: Symbol not found: __ZNSo9_M_insertImEERSoT_ Referenced from: /Users/zu/Desktop/OgreApp.app/Contents/MacOS/OgreApp Expected in: /usr/lib/libstdc++.6.dylib

dyld: Symbol not found: __ZNSo9_M_insertImEERSoT_ Referenced from: /Users/zu/Desktop/OgreApp.app/Contents/MacOS/OgreApp Expected in: /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-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(在 Libraries 文件夹中有 gcc 4.6.0 libstdc++.6.dylib 的拷贝),如 answer of my previous question 所建议.但错误仍然存​​在。

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

由于我的程序使用 Ogre 框架,所以我也将上述操作应用于嵌入在 Ogre.framework 中的 Ogre 可执行文件,但它没有改变任何东西。

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

最佳答案

Mac OS X 10.5 不包含 GCC 标准库的兼容拷贝。如果您希望您的代码在 Leopard 上运行,您将不得不修改它以在旧版本的 GCC 下编译,或者您将不得不……好吧,这确实是您唯一的选择。

关于c++ - 部署使用 GCC 4.6 编译的 OSX 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6444054/

相关文章:

linux - 与 gcc 5 的 OCCI 链接错误

linux - 如何在 ubuntu 15.04 中使用 g++-3.4

C++ 程序在访问一个巨大的数组时卡住

macos - Swift:点击刷新菜单栏

macos - 系统重启时自动启动 Jenkins 服务

macos - 是什么导致 OS X 应用程序无法打开并显示错误 "LSOpenURLsWithRole() failed with error -10810"?

java - 在windows中读写cmd

c++ - Visual C++ 2013、TFS 和属性表的问题

c++ - Qt VS 工具 : error reading VS project settings

c++ - 如何以跨本地方式在 Crosstools-NG 中使用 canadian 以在 arm board 上获取 gcc?