linux gcc .o文件,ld用法:gcc 的连接器ld怎样连上.o文件

比如,我有一个文件hello.c

gcc -c -o hello.o hello.c生成目标代码文件hello.o

我应该怎样用ld 连接成可执行的文件?

man ld

ld option objfile

option太长了,也没找出option该怎么写

网上找到:

ld -o OUTPUT /lib/crt0.o hello.o -lc

说的也不详细,系统里没有crt0.o

dolphin9@debian-gre:~/Program/C$ find /usr/ -name crt*

/usr/share/wine/skel/c/windows/system/crtdll.dll

/usr/lib/gcc-lib/i486-linux/3.3.5/crtbegin.o

/usr/lib/gcc-lib/i486-linux/3.3.5/crtbeginS.o

/usr/lib/gcc-lib/i486-linux/3.3.5/crtbeginT.o

/usr/lib/gcc-lib/i486-linux/3.3.5/crtend.o

/usr/lib/gcc-lib/i486-linux/3.3.5/crtendS.o

/usr/lib/wine/crtdll.dll.so

/usr/lib/crtn.o

/usr/lib/crti.o

/usr/lib/crt1.o

|

你可以改成如下方式,具體gcc是如何連接的可以用gcc -v -o  main main.c 查看

ld  --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o bb /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc/i486-linux-gnu/4.1.2/crtbegin.o  main.o   --no-as-needed  /usr/lib/gcc/i486-linux-gnu/4.1.2/crtend.o /usr/lib/crtn.o -lc

|

-lc  用c库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这种情况通常是由于在编译内核时,缺少某些必需的库或模块,导致连接器无法找到定义该符号的位置。解决方法如下: 1. 确认是否安装了必需的库和模块。 查看编译器报错信息中指示的缺失符号所在的头文件、库文件或模块是否已经安装。例如,报错信息中提到了 psinfo 符号,那么就需要检查相关的 ps 库文件是否已经安装,并且检查编译器命令中是否链接了该库。 2. 确认编译选项是否正确。 检查编译内核时所使用的命令行选项是否正确。确保使用了正确的编译器,以及指定了正确的内核源码路径和输出路径。可能还需要增加一些选项来告诉连接器从哪里查找缺失的符号。例如: gcc -o vmlinux -L/usr/local/lib -lpsinfo irqbypass.c 表示链接器在 /usr/local/lib 目录下查找 libpsinfo 库文件。如果库文件不在标准位置下,就需要使用 -L 选项来指定库文件路径。 3. 检查编译内核时是否添加了必要的补丁或模块。 有些内核功能需要添加特定的补丁或模块才能支持。如果报错信息中提示缺失的符号是某个内核模块中的函数或变量,就需要检查该模块是否已经正确安装。如果还没有安装,就需要先添加该模块再重新编译内核。 4. 清除编译过程中的临时文件。 有时编译过程中生成了一些临时文件,如果这些文件中的某个版本出错了,就可能导致编译出错。可以使用命令 make mrproper 清除所有编译过程中生成的临时文件,然后重新编译内核。 综上所述,处理 Linux 的编译报错需要综合考虑多种因素,包括库文件、编译选项、内核模块、临时文件等等。针对具体的报错信息,采取相应的解决方法,才能最终消除错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值