当前位置: 技术问答>linux和unix
linux gcc编译的程序在linux下无法运行
来源: 互联网 发布时间:2016-10-04
本文导语: 今天我的redhat 5企业版服务器突然出现了一个问题,以前都没事,我用gcc编译的程序无法运行,具体情况如下: 我程序的文件名为client.c,我是这样编译的 gcc -c client.c -o client 就生成了一个 client 文件,而且没有任...
今天我的redhat 5企业版服务器突然出现了一个问题,以前都没事,我用gcc编译的程序无法运行,具体情况如下:
我程序的文件名为client.c,我是这样编译的
gcc -c client.c -o client
就生成了一个 client 文件,而且没有任何错误和警告,但是生成的client文件没有可执行权限,不
管是用 chmod +x client 还是用 chmod 777 client 执行都报一个错误
bash: ./client: cannot execute binary file
我将gcc编译器重装了一遍,还是同样的问题,一点没改变,后来我发现这样编译是可以的:
gcc client.c -o client 或者 gcc client.c
生成的文件就可以执行了,但是一个文件可以这样,如果多个文件链接,不加 -c 参数就不行了
请教高手这是怎么回事呢?
我程序的文件名为client.c,我是这样编译的
gcc -c client.c -o client
就生成了一个 client 文件,而且没有任何错误和警告,但是生成的client文件没有可执行权限,不
管是用 chmod +x client 还是用 chmod 777 client 执行都报一个错误
bash: ./client: cannot execute binary file
我将gcc编译器重装了一遍,还是同样的问题,一点没改变,后来我发现这样编译是可以的:
gcc client.c -o client 或者 gcc client.c
生成的文件就可以执行了,但是一个文件可以这样,如果多个文件链接,不加 -c 参数就不行了
请教高手这是怎么回事呢?
|
在使用参数选项的时候 你得知道是啥意思 man gcc 看看-c选项的含义。
-c 只激活预处理 编译 和汇编 也就是他只把程序做成obj文件 是无法直接执行的
-c 只激活预处理 编译 和汇编 也就是他只把程序做成obj文件 是无法直接执行的
|
-c生成的是目标文件,当然不能直接运行了,你得到的client其实只是一个目标文件
多个文件,可以显用-c单独生成目标文件,再链接成exe
多个文件,可以显用-c单独生成目标文件,再链接成exe
|
如gcc -c test.c 就会生成test.o文件 需要经过ld连接器对所有的.o文件进行联接才能生成可执行文件
|
文件的编译,可以分步编译,也可以一起编译
gcc -c client1.c # 生成client1.o
gcc -c client2.c # 生成client2.o
gcc -o client client1.o client2.o
你也可以直接运行gcc -o client client1.c client2.c
gcc -c client1.c # 生成client1.o
gcc -c client2.c # 生成client2.o
gcc -o client client1.o client2.o
你也可以直接运行gcc -o client client1.c client2.c