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

发布于 2024-11-16 16:58:52 字数 1600 浏览 4 评论 0原文

我正在尝试将我的一个项目移植到 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 函数),而不是通常包含在 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 (带有 gcc 4.6.0 libstdc++.6.dylib 的副本在 Libraries 文件夹中),如建议的 我之前问题的答案。但错误仍然相同。

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

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

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

I'm trying to port a project of mine on Mac OS-X.

As I developed my project using C++0X I needed a more recent version of GCC than the one provided with Xcode (even Xcode4), so I compiled GCC 4.6 on my Snow Leopards Mac.

My project does compile fine and it does start too on the computer I compiled it (OS-X 10.6.7) but when I transfer it to my MacBook (OS-X 10.5.8) it doesn't works.

It returns the following errors:

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

I understand that the program needs the libstdc++.6.dylib of the GCC 4.6.0 as this file contains the C++0x functions (despite the fact that my current test doesn't use any C++0x function) instead of the standard libstdc++.6.dylib usually included in the OS-X system.

So I tried the following:

  • to specify -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5 in order to ensure backward compatibility with OS-X 10.5. But the error remains the same.

  • to verify the libstdc++.6.dylib path using otool -L and changing the shared library path using install_name_tool -change /opt/local/lib/gcc46/libstdc++.6.dylib @executable_path/../Libraries/libstdc++.6.dylib OgreApp (with a copy of the gcc 4.6.0 libstdc++.6.dylib in the Libraries folder) as suggested as answer of my previous question. But the error remains the same.

  • to statically link libstdc++ and libgcc using -static-libgcc - static-libstdc++. But it still returns the same error.

As my program use the Ogre framework, I applied the above manipulations to the Ogre executable embedded in the Ogre.framework too, but it doesn't change anything.

Does anyone can explain me how I'm supposed to deploy an application created with a non standard libstdc++ on another Mac computer installed with an older version (I guess the problem is the same with a computer running Snow Leopard as the program use the GCC 4.6.0 libstdc++) ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

朮生 2024-11-23 16:58:52

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

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文