首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用OS (10.5.8)在另一个Mac上运行在OS雪豹(10.6.7)上编译的应用程序。返回libstdc++.6.dylib错误

无法使用OS (10.5.8)在另一个Mac上运行在OS雪豹(10.6.7)上编译的应用程序。返回libstdc++.6.dylib错误
EN

Stack Overflow用户
提问于 2011-06-15 23:55:47
回答 2查看 5.5K关注 0票数 4

我试图在Max上使用C++0x和Ogre移植一个C++0x项目,并且在OS版本之间遇到了一个可移植性问题。

我成功地在MacOS-X10.6(雪豹)上编译了我的项目,使用GCC 4.6.0 (因为我需要C++0x)。这很难(可能是因为我是一个新的OSX用户),但它最终没有错误地编译了它。

我在Application.app包中包含了所需的所有组件、框架、插件等,它在这个MacOS-X10.6上启动得很好。

但是,当我在安装了MacOS-X10.5.8的旧笔记本上传输该项目时,我无法运行该应用程序。

如果我双击.app,它会尝试启动,最后图标会从菜单栏消失,仅此而已。但是,如果我直接运行.app中包含的可执行文件,它将返回以下错误:

代码语言:javascript
复制
MacBook-2:~ root# /var/root/Desktop/MyProject.app/Contents/MacOS/MyProject ; exit;
dyld: lazy symbol binding failed: Symbol not found: __ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i
  Referenced from: /var/root/Desktop/MyProject.app/Contents/MacOS/../Frameworks/Ogre.framework/Versions/1.7.3/Ogre
  Expected in: /usr/lib/libstdc++.6.dylib

dyld: Symbol not found: __ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i
  Referenced from: /var/root/Desktop/MyProject.app/Contents/MacOS/../Frameworks/Ogre.framework/Versions/1.7.3/Ogre
  Expected in: /usr/lib/libstdc++.6.dylib

Trace/BPT trap
logout

下面是应用程序包树视图。

MyProject.app

  • Components
    • .(食人魔components)

)

  • Ogre.framework

  • 框架

  • MyProject (executable)

  • MacOS MacOS

  • 插件
    • 。(食人魔plugins)

)

  • Resources
    • .(食人魔

.cfg +“我的资产”)

我告诉Cmake使用MacOSX10.5.sdk (设置在Cmake中,而不是在CMakeList.txt中):

  • CMAKE_OSX_DEPLOYEMENT_TARGET 10.5
  • CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk

但它似乎并没有改变什么..。

libstdc++.dylib文件,指向Mac上的libstdc++.6.0.9.dylib的链接,用于编译应用程序,而它链接到Mac上的libstdc++.6.0.4.dylib,用于测试可移植性。

但是,正如我告诉它使用MacOSX10.5.sdk一样,我认为它会在编译时使用libstdc++.6.0.4.dylib,这样它就可以在安装了10.5的Mac上运行

实际上,目标是让它在第二个Mac上运行(以及所有使用10.5+的Mac ),而不改变上面的任何内容。下载然后运行..。

,有人能告诉我我在这里错过了什么吗? (我对OS方法和组织不太熟悉,所以我可以忽略一些非常基本的东西,不要害怕粗俗的^^)。

如何在Cmake中指定目标SDK ? (使用的Cmake命令不够吗?)

我使用以下方法编译我的项目:

  • Mac X 10.6.7
  • GCC 4.6.0
  • Cmake 2.8-4
  • Ogre 1.7.3

F 264

我使用以下方法测试该项目:

  • MacOS-X10.5.8(安装了一些开发工具。我想我必须告诉它,以防它干扰申请)。

编辑:

正如我所发现的,otool这里返回的日志

代码语言:javascript
复制
Valkeas-Mac:MacOS root# otool -L MyProject 
MyProject:
    @executable_path/../Frameworks/Ogre.framework/Versions/1.7.3/Ogre (compatibility version 0.0.0, current version 1.7.3)
    @executable_path/../Components/libOgreTerrain.dylib (compatibility version 0.0.0, current version 1.7.3)
    /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 136.0.0)
    /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 12.0.0)
    /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
    /opt/local/lib/gcc46/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.15.0)
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /opt/local/lib/gcc46/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.19.0)
    /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 949.54.0)
    /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 34.0.0)
    /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 677.26.0)
Valkeas-Mac:MacOS root# 

显然,它链接到gcc46 libstdc++.6.dylib (可能正常,我猜这个文件包含GCC 4.6.0的C++0x函数)。

那么有什么解决方案吗?(-static返回一个错误,告诉我需要动态.)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-16 09:42:13

您使用的libstdc++来自gcc 4.6。由于您使用的是C++0x,这是gcc版随OS发布的版本中所没有的,因此内置的libstdc++不能工作也就不足为奇了。您需要在应用程序包中发布正在使用的libstdc++.dylib (您可以将它放入其中,例如. can /Contents/库)。使用install_name_tool确保使用相对路径引用它(使用@rpath@executable_path)。

票数 4
EN

Stack Overflow用户

发布于 2014-01-12 13:42:29

虽然所选的答案对很多人来说可能更实用,但这实际上是苹果工具链中的一个bug,它是用一个非常小的补丁来修复的。把这个问题归咎于使用C++0x,甚至把这个问题归咎于使用不同版本的gcc,这肯定是不正确的:这些东西通常都是可以用的。考虑到有多少用户(从谷歌搜索来看)似乎体验到了这个问题,希望Xcode 5.1能解决这一问题(尽管考虑到苹果过去为更好地支持向后兼容性而进行的5分钟简单修正的自鸣得意反应,我不会屏住呼吸;不管怎么说,我都会发送雷达,因为我认为这种事情真的很重要)。修复方法是修改ostream报头,以在字符串的__TARGETING_4__DYLIB实现周围添加operator<<保护。我在http://test.saurik.com/apple/ostream1.diff的网站上放了一个补丁。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6365772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档