Chinaunix
标题:
为什么ld默认是找_start而不是main? 如何让ld找main呢?
[打印本页]
作者:
cdsfiui
时间:
2016-09-20 19:55
标题:
为什么ld默认是找_start而不是main? 如何让ld找main呢?
$ cat n.c
#include<stdlib.h>
void main()
{
exit(0);
}
复制代码
我先直接gcc n.c然后
$ a.out
可以执行,没问题
我尝试分开编译和链接的过程:
$ gcc -c n.c && ld n.o -o n -lc && n
ld: 警告: 无法找到项目符号 _start; 缺省为 0000000000400260
复制代码
于是我把main改成了_start,看起来可以没有main函数:
#include<stdlib.h>
void _start()
{
exit(0);
}
复制代码
$ gcc -c n.c && ld n.o -o n -lc
$ n
bash: ./n: 没有那个文件或目录
我在bash下面a.out没有问题,n就不行,./n也不行。太奇怪了,明明就在当前目录下,为什么不能运行呢?
谢谢。
作者:
MMMIX
时间:
2016-09-20 23:10
回复
1#
cdsfiui
先用 gcc -v n.c 看看 gcc 是怎么编译链接你的 n.c 的。
作者:
cdsfiui
时间:
2016-09-21 12:00
回复
2#
MMMIX
我看了一下,输出挺多的,那一行是我的问题所在呢?
Plus:
我尝试了一下gcc n.c>gcc_v然后发现gcc_v是空文件。gcc n.c 2>&1 >gcc_v,可是发现gcc_v还是空文件。
这是什么问题?
作者:
MMMIX
时间:
2016-09-21 16:46
回复
3#
cdsfiui
输出挺多的,那一行是我的问题所在呢?
你自己链接的可执行文件有问题,那你看看gcc是怎么链接出正确可执行文件的。这不是很显然么?
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2