如何编译程序以便在Mac上分发

时间:2010-09-28 20:40:53

标签: macos gcc compilation static-linking

我正在开发一个关于OSX 10.6.4(Snow Leopard)的程序,我希望能够在其他Intel Mac上运行已编译的产品,其中一些可能没有XCode isntalled。

为简化起见,我首先写了一个Hello World程序。

#include<stdio.h>
int main() {
    printf("Hello world!\n");
    return 0;
}

如果我将其编译为

gcc -static prog.c

我得到了以下错误:

ld: library not found for -lcrt0.o

我不知道在哪里可以找到这个库。现在,有些人提到我不应该在mac上静态编译,因为 system 共享库应该随处可用(第三方库可以手动链接)。但是,当我尝试在另一个mac上运行这个Hello World程序时,我得到了以下错误:

 dyld: unknown required load command 0x80000022
 Trace/BPT trap

那么,如何在mac上编译程序以便它可以分发?我没有架构问题,因为我感兴趣的大多数计算机都是Intel Macs。

2 个答案:

答案 0 :(得分:2)

请勿使用-static。您的可执行文件将在其他10.6.x x86 Mac上正常运行。如果你想在10.6之前的Mac上进行部署,那么你将需要使用适当的SDK,但除此之外它应该“正常工作”,无论是否安装了开发人员工具。

答案 1 :(得分:1)

使用命令行程序模板(基本Unix可执行文件)创建可执行文件可能是值得的,因为它将为您管理许多编译器选项(包括您正在编译的SDK /哪些版本)你的目标是。)

我的猜测是默认的命令行编译将针对当前系统库进行编译(10.6.4)。