4

我正在尝试在 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_ 引用自:/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

我知道该程序需要 GCC 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 的副本)作为我之前问题的答案的建议。但错误仍然是一样的。

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

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

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

4

1 回答 1

0

Mac OS X 10.5 does not include a compatible copy of the GCC standard library. If you want your code to run on Leopard, you'll have to either modify it to compile under an older version of GCC, or you'll have to... well, really that's your only option.

于 2011-06-22T17:35:58.423 回答