c - 如何使用带有 '-static' 的 gcc 命令

标签 c gcc static-linking

当我尝试使用 gcc 命令编译带有静态库 't1' 的测试程序时,该静态库由我自己归档。

我用来归档静态库的命令是这样的:

ar rcv libt1.a t1.o

使用以下命令出现错误:

gcc -L. -static -lt1 t.c -o t

ld: library not found for -lcrt0.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)

但是,如果我像这样删除“-static”:

gcc -L. -lt1 t.c -o t

编译成功。我得到了正确的结果。

但我搜索了很多,发现其他人使用“-static”,他们没有得到错误。所以,请帮我算一下。

最佳答案

如评论中所述,-static 不需要链接到您的静态库,但用于指示编译器静态链接到 C(和 C++,如果g++) 运行时库。这is not supported在 OS X 上(链接取自上面的 linked answer),因此出现错误。

要链接到您的静态库,只需像在第二个命令行中那样操作,无需指定 -static

But I search a lot, find out other guys use '-static', and they do not get an error. So, please help me figure that.

他们可能在 Linux 或 Windows 上工作,其中支持针对 libc 的静态链接(尽管即使在 Linux 上它也带来了相当多的问题)。

关于c - 如何使用带有 '-static' 的 gcc 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36169528/

相关文章:

c - 防止文件被重新创建或覆盖

c++ - 为什么我在 MinGW 中不需要标志 -lm 但在 Linux 中我明确需要它?

c - 升级到Mojave后,无法在Mac上编译C程序

c++ - 使用静态库时未定义的函数引用

cmake - CMake为静态库生成-L <path> -l <​​lib>链接标志

c - 小于给定 n 的斐波那契数列的数量

c - c 中的矩阵乘法

c - 所有 float 都在一个函数中,通过引用调用

gcc - ARM 汇编中的立即值是否需要哈希?

static - 如何强制使用静态库而不是共享?