我正在尝试在 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++) ?