c++ - 将C代码编译成完全静态链接出错

浏览:22日期:2023-05-04

问题描述

正常编译一个hello world

#include<stdio.h>int main(){ printf('hello world!n'); return 0;}使用static参数编译失败

a.out main.c$ gcc -static main.c[localhost test]$ gcc -static main.c/usr/bin/ld: cannot find -lccollect2: error: ld returned 1 exit status默认编译可以

$ gcc main.c$ ls test]$ ldd a.out linux-vdso.so.1 => (0x00007fff0c3fe000) libc.so.6 => /lib64/libc.so.6 (0x00007f5cbb43a000) /lib64/ld-linux-x86-64.so.2 (0x00007f5cbb802000)可以看到a.out还是依赖系统库的。在另一台机器可以成功将hello world成静态链接的了

[root@ctos helloworld]# gcc -static hello.c[root@ctos helloworld]# lsa.out hello hello.c hello.go mv[root@ctos helloworld]# ldd a.out not a dynamic executable目前问题集中在报错,不知道原因

[localhost test]$ gcc -static main.c/usr/bin/ld: cannot find -lccollect2: error: ld returned 1 exit status

问题解答

回答1:

看 /usr/lib 目录有没有 libc.a

$ gcc -static main.c

$ gcc -static -lc main.c回答2:

c只能 动态 静态 而且 运行 本地必须有标准库

回答3:

拷贝libc.a到当前目录

gcc main.c -L. -lc

相关文章: