在Linux下进行Mac的交叉编译非常麻烦。为了设置交叉编译,你需要一个苹果开发者账号、XCode中的SDK等等。我尝试过,但无法使其正常工作。似乎所有可用的说明都已经过时了。
但我想要编译的程序只是一个小型Shell工具,只需要一个标准的C库(最好是静态链接的glibc)。不需要Mac框架或Objective-C。编译Windows上的二进制文件很容易,但在OS X上就不那么容易了。这几乎就像缺少连接部分一样,因为你可以这样构建mach-o对象文件:
有没有办法使用未经修补的clang在Linux下编译Mac OS X的mach-o对象?然后是否有一种方法将这样的对象文件与Mac的静态glibc链接,以便在OS X下运行?我应该从哪里获取这样的glibc(我猜我必须自己编译它)?
但我想要编译的程序只是一个小型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
有没有办法使用未经修补的clang在Linux下编译Mac OS X的mach-o对象?然后是否有一种方法将这样的对象文件与Mac的静态glibc链接,以便在OS X下运行?我应该从哪里获取这样的glibc(我猜我必须自己编译它)?
$ ldd /lib64/libc.so.6↵ /lib64/ld-linux-x86-64.so.2 (0x0000003cf9600000)↵ linux-vdso.so.1 => (0x00007fff14f52000)
而这已经比我预期的多一个了(但yum说ld-linux-x86-64.so.2已经包含在glibc软件包中了)。总之,对于一个小小的shell程序来说,这一切对我来说似乎都太复杂了。我可能应该用Python编写它,并且使用py2exe/py2dmg(或称为什么)来处理非Linux系统。 - panzi