我就是不明白。
我相信 gcc 在调用 gcc 驱动程序时会自动链接 libc.a。
但是,出于好奇,我想使用 -static
静态链接 libc.a,但我明白了;
ld: library not found for -lcrt0.o
collect2: ld returned 1 exit status
我就是不明白?另外,crt0
是什么?
我还读过一些帖子说从不静态链接 libc.a ;为什么?从我读过的内容来看(诚然我只是一名本科生),我没有看到静态链接的缺点..
我读了this告诉我添加似乎编译正确的 -lc
的帖子,但这是静态链接还是只是添加 libc.dylib ?
此外,每当我使用 -static
标志时,我都会收到从 ld
返回的相同错误。我不明白?我正在研究的文本显示了使用 Unix 环境的示例,并且由于 OS X 是基于 Unix 的,为什么我在使用 Mac 时遇到这么多困难?
谢谢,扎克
最佳答案
这是 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/
关于c - mac 上的静态链接库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16718406/