Mac上的静态链接库

gon*_*one 3 c macos linker static-linking

我只是不明白。

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

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

ld: library not found for -lcrt0.o
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

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

我也读过一些帖子,说永远不要静态链接libc.a;为什么?从我所读的内容(当然我只是一个本科生)来看,我看不到静态链接的弊端。

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

此外,每当我使用-staticflag时,都会收到从返回的相同错误ld。我听不懂 我正在研究的文本显示了使用Unix环境的示例,并且由于OS X是基于Unix的,为什么我的Mac会有这么多困难?

谢谢,扎克

syn*_*tel 5

这是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.
Run Code Online (Sandbox Code Playgroud)

如果您觉得自己在上游游泳,请习惯一下-因为使用应用程序沙箱,签名,更改模型等操作将不会很容易。

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

几个有用的链接:

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

  • 更可能的情况是:在操作系统提供的库中发现安全错误,并在 OS X 软件更新中修复。如果您的可执行文件是动态链接的,那么没问题。如果它是静态链接的,您的应用程序仍然容易受到安全问题的影响。如果您的应用程序已被许多人下载,那么问题就更加严重了。 (2认同)