我的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++、...