gcc手工指定链接.o文件失败, 找不到几个定义
我在64位的ubuntu上面,有一个很简单的程序$ cat test.c
int f(int x){
int i=(x/42);
return i;
}
int main(){
return 0;
}
然后尝试手工链接几个库来生成
$ gcc test.c -nostdlib /usr/lib/x86_64-linux-gnu/crt1.o /usr/lib/x86_64-linux-gnu/crti.o /usr/lib/x86_64-linux-gnu/crtn.o
错误信息是:
/usr/lib/x86_64-linux-gnu/crt1.o:在函数‘_start’中:
(.text+0x12):对‘__libc_csu_fini’未定义的引用
/usr/lib/x86_64-linux-gnu/crt1.o:在函数‘_start’中:
(.text+0x19):对‘__libc_csu_init’未定义的引用
/usr/lib/x86_64-linux-gnu/crt1.o:在函数‘_start’中:
(.text+0x25):对‘__libc_start_main’未定义的引用
collect2: error: ld returned 1 exit status
我这么做是想尝试一下<<程序员的自我修养>>里面提到的手工链接方式。我还缺少什么东西吗?
本帖最后由 windoze 于 2017-02-12 00:05 编辑
这几个东西在glibc里,你加一个"-lc"就好了。
另外可能还要调整一下顺序,我记得应该是crt1, crti, your_code, libc, crtn这么个顺序,如果不是的话可能还是不成。 回复 1# cdsfiui
直接用 gcc -v 先看下 gcc 自己是怎么做的呗。 windoze 发表于 2017-02-12 00:02
这几个东西在glibc里,你加一个"-lc"就好了。
另外可能还要调整一下顺序,我记得应该是crt1, crti, your_c ...
果然是这样,必须有-lc才行啊
页:
[1]