c - mac 上的静态链接库

标签 c macos linker static-linking

我就是不明白。

我相信 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/

相关文章:

c - 我创建这个数组时分配的内存在哪里? (C)

c - fork() - 让父进程工作而不等待子进程

linux - 如何指定 scons 中使用的 linux 程序集的命令行 args 和 liker?

c++ - 如何在 C/C++ 中使用带有 OpenSSL 的静态链接

控制内核中的函数指针

editor - 如何在source insight中打开一个c项目?

python - 检查 Homebrew 安装以安装 Python

objective-c - 如何将 id 转换为 float ?

python - 在 python 2.7.6 下安装 PyX

c++ - std::fill 的 Clang 静态参数导致链接器失败