4

我只是不明白。

我相信 gcc 在调用 gcc 驱动程序时会自动链接 libc.a。

但是,出于好奇,我想使用静态链接 libc.a -static,但我得到了;

ld: library not found for -lcrt0.o
collect2: ld returned 1 exit status

我只是不明白?还有,什么crt0

我也读过帖子说永远不要静态链接 libc.a ;为什么?从我所读到的(诚然,我只是一名本科生),我没有看到静态链接的缺点。

我读了这篇文章,告诉我添加-lc似乎可以正确编译的内容,但这是静态链接还是只是添加 libc.dylib ?

此外,每当我使用-static标志时,我都会从ld. 我不明白?我正在阅读的文本显示了使用 Unix 环境的示例,并且由于 OS X 是基于 Unix 的,为什么我在使用 Mac 时遇到这么多困难?

谢谢,扎克

4

1 回答 1

8

这是 Apple 关于库和开发应该如何工作的决定之一。它们通过使构建静态二进制文件尽可能困难来劝阻您。

http://developer.apple.com/上提供了一些弱酱解释,有用的花絮是:

>     If your project absolutely must create a statically linked binary, 
> you can get the Csu (C startup) module from [Darwin][2] and try
> building crt0.o for yourself. Obviously, we won't support such an
> endeavor.

如果您觉得自己在逆流而上,请习惯它——因为应用沙盒、签名、dyld 更改等不会让您更轻松。

从好的方面来说,现在尝试在 OSX 上做 unix 的东西是前卫和危险的。

几个有用的链接:

http://reverse.put.as/2013/03/20/how-to-compile-gdb-in-mountain-lion-updated/ http://www.osxbook.com/

于 2013-05-23T15:57:48.970 回答