关于Mac上交叉编译几个小问题,求解答

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Mac上交叉编译几个小问题,求解答相关的知识,希望对你有一定的参考价值。

参考技术A 我是打算编译给模拟器用的库喔。sysroot设置成simulator.platform相应的目录了。但是还是出现clang: warning: using sysroot for 'iPhoneSimulator' but targeting 'MacOSX'。虽然是warning但是不知道有没影响。 参考技术B   1、首先在 MacBook Air 关上的情况下,按着 Command 及 R 两个按键不放手,然后同时按下最右上角的开关键一下(记着此时仍然继续按着 Command + R 键)。
  2、当进入至此介面后,就可以放开所有按键。当中有 4 个选项:Restore From Time Machine Backup 是从你过去备份至 Time Machine 的映像档回复电脑、Reinstall Mac OS X 顾名思义就是重新安装 Mac OS X Lion、Get Help Online 则是从线上撷取帮助档了解重装步骤及常见问题、而最后的 Disk Utility 则是管理硬碟之用,包括:分割磁区、将磁碟区格式化等。
  3、在画面右上角,可以连接 Wi-Fi,建议大家必须连接,以确保下载及安装过程一切顺利。
  4、点按「Get Help Online」就可以看到回复系统的所有资料及步骤。
  5、最有趣的是,它其实是一个完整版的 Safari,在此已可以上网浏览网页。
  6、如果点按 Restore From Time Machine Backup,就可以进入此介面。记着此时要将过去用作 Time Machine 备份的外置硬碟与 MacBook Air 接驳,再点按「Continue」。
  7、如果已接驳了硬碟,应可在此页看到过去的备份档,只要选取了再点按「Continue」就可以将 MacBook Air 回复至备份时的情况。由于未有使用 Time Machine,所以不在此再多述此项功能了。
  8、点按「Partitions」,再拉动下方左侧白色部分右下角的位置,就可以调节使用 Macintosh HD 的部分。完成后再在右方点按未设定的部分,再建立新磁区就可以了。当然,安装了 Mac OS X Lion 后,大家亦随时可以在「Utilities」中的「Disk Utility」进行这项动作。
  9、点按「Reinstall Mac OS X」,然后会弹出在安装前会先与 Apple 的伺服器取得认证,记得此时一定要接驳互联网,然后点按「Continue」继续。
  10、点按「Reinstall Mac OS X」,然后会弹出在安装前会先与 Apple 的伺服器取得认证,记得此时一定要接驳互联网,然后点按「Continue」继续。
  11、会看到一段 Agreement,点按「Agree」后再点按上方的「Agree」即可。
  12、再选择希望将 Mac OS X Lion 安装到哪个磁碟区。
  13、开始重装了,等等吧!这个下载步骤大约需要 1 小时左右(在 Wi-Fi 连线情况下)。

在linux上交叉编译c++到windows

【中文标题】在linux上交叉编译c++到windows【英文标题】:cross compile c++ on linux to windows 【发布时间】:2014-05-06 09:17:04 【问题描述】:
clang++ main.cpp -std=c++11 -target x86_64-unknown-win32 -I/usr/lib/gcc/x86_64-w64-mingw32/4.6/include/
main.cpp:6:10: fatal error: 'string' file not found
#include <string>
         ^
1 error generated.

这很奇怪,因为:

/usr/lib/gcc/x86_64-w64-mingw32/4.6/include/ssp$ ls
ssp.h  stdio.h  string.h  unistd.h

结果是一样的:

clang++ main.cpp -std=c++11 -target x86_64-unknown-win32 -I/usr/lib/gcc/x86_64-w64-mingw32/4.6/include/ssp

好吧。我曾经使用以下方法将c代码从linux编译到windows就好了:

x86_64-w64-mingw32-gcc main.c

我试过了:

x86_64-w64-mingw32-g++ -std=c++0x main.cpp

还有:

x86_64-w64-mingw32-g++ -std=c++0x main.cpp  -I/usr/lib/gcc/x86_64-w64-mingw32/4.6/include

仍然会给出一堆错误,例如

main.cpp:70:23: sorry, unimplemented: non-static data member initializers
main.cpp:70:23: error: in-class initialization of static data member ‘origin’ of non-literal type
main.cpp: In constructor ‘Item::Item(std::string)’:
main.cpp:83:18: error: ‘stoul’ is not a member of ‘std’
main.cpp:88:4: error: ‘origin’ was not declared in this scope
main.cpp:89:17: error: ‘stof’ is not a member of ‘std’
main.cpp: In function ‘std::ostream& operator<<(std::ostream&, const Item&)’:
....

x86_64-w64-mingw32-g++ (GCC) 4.6.3 似乎是 ubuntu repo 上的最新版本。

我迷路了..为什么该死的铿锵声不会使用标题。为什么 x86_64-w64-mingw32-g++ 不听它应该使用 c++11 标准。

【问题讨论】:

string.h 和 string 一样吗?我认为不会。 Mingw 众所周知缺乏构建,并且从包管理器安装时通常已经过时了。您显示的错误可能是因为该版本实际上不支持它们。 乍一看,您使用的是 GCC 4.6.3。那肯定不支持你所追求的功能,你应该考虑将 MinGW 更新到 4.8 或 4.9 版本(我不知道是否支持 4.9) @CoffeeandCode 请不要传播 FUD。你不知道你在说什么。 @C19 Ubuntu 14.04 提供了MinGW-w64 GCC 4.8.2,它应该支持你所需要的。是时候更新您的系统了!请注意,如果您使用 this patch 自己构建 clang,您应该能够将 Clang 与您的 MinGW-w64 标头/库一起使用。它仍将使用 MinGW-w64 GCC 的 libstdc++,因此请确保您安装的库版本具有所需的功能。 【参考方案1】:

您使用的 GCC 版本不支持non-static data member initializers,如图here。找出 here 哪个版本的 GCC 支持您所需的 C++11 功能集。

【讨论】:

以上是关于关于Mac上交叉编译几个小问题,求解答的主要内容,如果未能解决你的问题,请参考以下文章

在linux上交叉编译opencv踩过的坑

在ubuntu上交叉编译Boost 1.57.0 for arm

windows上交叉编译go程序

如何在 Ubuntu 上交叉编译 ARM 架构的 CGO 程序

在 Linux for Windows 上交叉编译 Qt5

使用 arm-apple-darwin10-llvm-gcc-4.2 在 MacOS 上交叉编译问题