当前位置: 技术问答>linux和unix
ld 连接问题
来源: 互联网 发布时间:2016-11-16
本文导语: 我写了两个文件(1.c,2.c)目的想验证一下在C语言中在一个文件中调用另一个文件变量,文件内容如下 /************1.c*********************/ #include int chen =10; void xian() { printf("xian!n"); } /*********2.c*********************/ #include void ...
我写了两个文件(1.c,2.c)目的想验证一下在C语言中在一个文件中调用另一个文件变量,文件内容如下
/************1.c*********************/
#include
int chen =10;
void xian()
{
printf("xian!n");
}
/*********2.c*********************/
#include
void xian();
extern int chen;
void main()
{
printf("now is %dn",chen);
xian();
}
我分别使用如下命令,将两文件编译成连接文件
gcc -c -o 1.o 1.c
gcc -c -o 2.o 2.c
然后我在使用ld 命令进行连接
ld -o chen.out 1.o 2.o
此时出现错误,提示为
ld: warning: cannot find entry symbol _start; defaulting to 0000000008048094
我查阅了相关资料,说是如果使用ld指令时需要在汇编一个入口函数_start,于是我又写了个文件3.asm,内容如下
/*******************3.asm**********************/
extern main;
global _start
_start:
call main;
使用nasm命令编译成连接文件
nasm -f elf -o 3.o 3.c
好了之后,再次使用ld命令
ld -o chen.out 1.o 2.o 3.o
再次出现错误
1.o: In function `xian':
1.c:(.text+0xe): undefined reference to `puts'
2.o: In function `main':
2.c:(.text+0x1c): undefined reference to `printf'
这次真的有点懵了,据有些人说是由于我使用了C语言的库函数,需要加相应的参数,我实在不知道如何做了,高手指点下,不胜感激。。。。
/************1.c*********************/
#include
int chen =10;
void xian()
{
printf("xian!n");
}
/*********2.c*********************/
#include
void xian();
extern int chen;
void main()
{
printf("now is %dn",chen);
xian();
}
我分别使用如下命令,将两文件编译成连接文件
gcc -c -o 1.o 1.c
gcc -c -o 2.o 2.c
然后我在使用ld 命令进行连接
ld -o chen.out 1.o 2.o
此时出现错误,提示为
ld: warning: cannot find entry symbol _start; defaulting to 0000000008048094
我查阅了相关资料,说是如果使用ld指令时需要在汇编一个入口函数_start,于是我又写了个文件3.asm,内容如下
/*******************3.asm**********************/
extern main;
global _start
_start:
call main;
使用nasm命令编译成连接文件
nasm -f elf -o 3.o 3.c
好了之后,再次使用ld命令
ld -o chen.out 1.o 2.o 3.o
再次出现错误
1.o: In function `xian':
1.c:(.text+0xe): undefined reference to `puts'
2.o: In function `main':
2.c:(.text+0x1c): undefined reference to `printf'
这次真的有点懵了,据有些人说是由于我使用了C语言的库函数,需要加相应的参数,我实在不知道如何做了,高手指点下,不胜感激。。。。
|
看看 《程序员的自我修养》 这本书吧
程序的运行不光你的那三个o文件链接起来就行的,还需要操作系统的支持。还需要运行库...
程序的运行不光你的那三个o文件链接起来就行的,还需要操作系统的支持。还需要运行库...
|
写个makefile吧
|
gcc -o chen.out 1.o 2.o
|
友情帮顶。
网上关于ld的资料比较少。《程序员的自我修养》里有介绍ld。
那个找不到_start的警告,可以通过-e main来指定入口。
还是用Gcc吧。
网上关于ld的资料比较少。《程序员的自我修养》里有介绍ld。
那个找不到_start的警告,可以通过-e main来指定入口。
还是用Gcc吧。