- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试在 Max OS-X 上使用 C++0x 和 Ogre 移植一个 C++ 项目,但我遇到了 OS-X 版本之间的可移植性问题。
我成功地使用 GCC 4.6.0 在 Mac OS-X 10.6 (Snow Leopard) 上编译了我的项目(因为我需要 C++0x)。这很难(可能因为我是 OSX 的新用户)但它最终编译它没有错误。
我在 Application.app 包中包含了所有必需的组件、框架、插件等,它在这个 Mac OS-X 10.6 上运行良好
但是当我在安装了 Mac OS-X 10.5.8 的旧笔记本电脑上传输项目时,我无法运行该应用程序。
如果我双击 .app,它会尝试启动,最后图标从菜单栏中消失,仅此而已。但是,如果我直接运行 .app 中包含的可执行文件,它会返回以下错误:
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
这是应用程序包 TreeView 。
MyProject.app
我告诉 Cmake 使用 MacOSX10.5.sdk 使用(在 Cmake GUI 中设置,而不是在 CMakeList.txt 中设置):
但似乎并没有改变什么...
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-X 的方法和组织,所以我可能会遗漏一些非常基本的东西,不要害怕粗鲁 ^^)。
如何在Cmake中指定目标SDK?(使用的Cmake命令是否不够用?)
我使用以下来编译我的项目:
我使用以下来测试项目:
编辑:
正如我发现 otool 这里是返回的日志
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 返回一个错误,告诉我需要动态...)
最佳答案
您使用的 libstdc++
来自 gcc 4.6。由于您使用的是 C++0x,它在 OS X 附带的 gcc 版本中不可用,因此内置 libstdc++
不起作用也就不足为奇了。您需要将您正在使用的libstdc++.dylib
发送到您的应用程序包中(您可以将其放在例如your.app/Contents/Libraries 中)。使用 install_name_tool
确保它是使用相对路径引用的(使用 @rpath
或 @executable_path
)。
关于c++ - 无法在另一台使用 OS-X Leopard (10.5.8) 的 Mac 上运行在 OS-X Snow Leopard (10.6.7) 上编译的应用程序。返回 libstdc++.6.dylib 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6365772/
问题故障解决记录 -- Java RMI Connection refused to host: x.x.x.x .... 在学习JavaRMI时,我遇到了以下情况 问题原因:可
我正在玩 Rank-N-type 并尝试输入 x x .但我发现这两个函数可以以相同的方式输入,这很不直观。 f :: (forall a b. a -> b) -> c f x = x x g ::
这个问题已经有答案了: How do you compare two version Strings in Java? (31 个回答) 已关闭 8 年前。 有谁知道如何在Java中比较两个版本字符串
这个问题已经有答案了: How do the post increment (i++) and pre increment (++i) operators work in Java? (14 个回答)
下面是带有 -n 和 -r 选项的 netstat 命令的输出,其中目标字段显示压缩地址 (127.1/16)。我想知道 netstat 命令是否有任何方法或选项可以显示整个目标 IP (127.1.
我知道要证明 : (¬ ∀ x, p x) → (∃ x, ¬ p x) 证明是: theorem : (¬ ∀ x, p x) → (∃ x, ¬ p x) := begin intro n
x * x 如何通过将其存储在“auto 变量”中来更改?我认为它应该仍然是相同的,并且我的测试表明类型、大小和值显然都是相同的。 但即使 x * x == (xx = x * x) 也是错误的。什么
假设,我们这样表达: someIQueryable.Where(x => x.SomeBoolProperty) someIQueryable.Where(x => !x.SomeBoolProper
我有一个字符串 1234X5678 我使用这个正则表达式来匹配模式 .X|..X|X. 我得到了 34X 问题是为什么我没有得到 4X 或 X5? 为什么正则表达式选择执行第二种模式? 最佳答案 这里
我的一个 friend 在面试时遇到了这个问题 找到使该函数返回真值的 x 值 function f(x) { return (x++ !== x) && (x++ === x); } 面试官
这个问题在这里已经有了答案: 10年前关闭。 Possible Duplicate: Isn't it easier to work with foo when it is represented b
我是 android 的新手,我一直在练习开发一个针对 2.2 版本的应用程序,我需要帮助了解如何将我的应用程序扩展到其他版本,即 1.x、2.3.x、3 .x 和 4.x.x,以及一些针对屏幕分辨率
为什么案例 1 给我们 :error: TypeError: x is undefined on line... //case 1 var x; x.push(x); console.log(x);
代码优先: # CASE 01 def test1(x): x += x print x l = [100] test1(l) print l CASE01 输出: [100, 100
我正在努力温习我的大计算。如果我有将所有项目移至 'i' 2 个空格右侧的函数,我有一个如下所示的公式: (n -1) + (n - 2) + (n - 3) ... (n - n) 第一次迭代我必须
给定 IP 字符串(如 x.x.x.x/x),我如何或将如何计算 IP 的范围最常见的情况可能是 198.162.1.1/24但可以是任何东西,因为法律允许的任何东西。 我要带198.162.1.1/
在我作为初学者努力编写干净的 Javascript 代码时,我最近阅读了 this article当我偶然发现这一段时,关于 JavaScript 中的命名空间: The code at the ve
我正在编写一个脚本,我希望避免污染 DOM 的其余部分,它将是一个用于收集一些基本访问者分析数据的第 3 方脚本。 我通常使用以下内容创建一个伪“命名空间”: var x = x || {}; 我正在
我尝试运行我的test_container_services.py套件,但遇到了以下问题: docker.errors.APIError:500服务器错误:内部服务器错误(“ b'{” message
是否存在这两个 if 语句会产生不同结果的情况? if(x as X != null) { // Do something } if(x is X) { // Do something } 编
我是一名优秀的程序员,十分优秀!