Linux下的Mac交叉编译是一个主要的PITA。要设置交叉编译,您需要一个Apple开发人员帐户,来自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下使用未修补的clang编译Mac OS X的mach-o对象?那么有没有办法将这样的目标文件与Mac的静态glibc链接起来,以便在OS X下运行?我会在哪里获得这样的glibc(我想我必须以某种方式自己编译)?
答案 0 :(得分:2)
我的OSXCross项目可能正是您所寻找的。 p>
有没有办法在Linux下使用未修补的clang编译Mac OS X的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支持吗?
是。 AFAIK %zu
printf说明符适用于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 ++,...