Mac在Linux下的交叉编译是一个主要的PITA。为了设置交叉编译,你需要一个苹果开发者账号,XCode的SDK等等。我试过了,但没有用。似乎所有可用的指令都过时了。
但是我想编译的程序只是一个小的shell工具,只需要一个标准的C库(最好是静态链接的glibc)。不需要Mac框架或Objective-C。在Windows上编译这样的二进制文件很容易,但在OS x上就不那么容易了。似乎缺少的只是链接部分,因为您可以像这样构建mach-o对象文件:
clang -target i386-apple-darwin-macho hello_world.c -o hello_world.o -c
当然没那么简单,因为这会产生一个错误:
echo $'#ifdef __linux__n#error "thinks it's for linux"n#endif'|
clang -x c - -o /dev/null -c
有没有办法在Linux下编译Mac OS X未修补的clang的mach-o对象?那么有没有一种方法来链接这样一个对象文件与Mac的静态glibc,使其在OS X下运行?我从哪里得到这样的glibc(我想我必须以某种方式自己编译它)?
我的OSXCross项目可能就是你正在寻找的。
有没有办法在Linux下编译Mac OS X未修补的clang的mach-o对象?
是的。Clang默认是一个交叉编译器。但是,您还需要cctools/ld64和Mac OS X SDK。
是否有一种方法可以将这样的对象文件与Mac的静态glibc连接起来,以便在OS X下运行?
Mac OS X没有glibc,它在那里被简单地称为Libc
。不需要静态链接
我从哪里得到这样的glibc(我想我必须以某种方式自己编译它)?
你需要得到Mac OS X SDK,没有别的办法。即使你设法手工构建Libc
,你仍然缺乏很多必需的库。
我知道Mac OS X不支持glibc。
Mac OS x没有glibc。
…但我编写的代码是反对这种情况的。例如:我使用PRIuPTR (%zu)等,Mac的libc支持吗?
是的。我猜%zu
打印说明符可以在除Windows之外的任何地方使用。
这正是我所担心的。上次我试的时候,它非常麻烦,我无法使它工作。
获得一个免费的Apple开发者帐户,然后您可以通过https://developer.apple.com/downloads/index.action下载Xcode。
完成后,请按照SDK打包说明进行操作。
号什么库?libc应该只需要进行系统调用,而不需要使用其他库。
$ otool -L /usr/lib/libc.dylib
libc.dylib (architecture x86_64):
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
/usr/lib/system/libcache.dylib (compatibility version 1.0.0, current version 69.0.0)
/usr/lib/system/libcommonCrypto.dylib (compatibility version 1.0.0, current version 60061.0.0)
/usr/lib/system/libcompiler_rt.dylib (compatibility version 1.0.0, current version 35.0.0)
/usr/lib/system/libcopyfile.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/system/libcorecrypto.dylib (compatibility version 1.0.0, current version 233.1.2)
/usr/lib/system/libdispatch.dylib (compatibility version 1.0.0, current version 442.1.4)
/usr/lib/system/libdyld.dylib (compatibility version 1.0.0, current version 353.2.1)
/usr/lib/system/libkeymgr.dylib (compatibility version 1.0.0, current version 28.0.0)
/usr/lib/system/liblaunch.dylib (compatibility version 1.0.0, current version 559.20.9)
/usr/lib/system/libmacho.dylib (compatibility version 1.0.0, current version 862.0.0)
[And so on...]
如果我能给你一个好的建议,甚至不要尝试手工构建Libc
。这样做(几乎)是不可能的。上次我试了很多头文件都不见了,我甚至无法通过opensource.apple.com找到。
纯属浪费时间。
到目前为止,C库并不是OS X所需的全部,很多库依赖于(闭源)框架,libc++,…