导航:首页 > 源码编译 > gcc编译链接后结果不同

gcc编译链接后结果不同

发布时间:2022-10-07 07:30:27

‘壹’ 在红旗下用gcc编译器运行以下两段代码结果为什么不一样

用gcc编译
以下是例子
实例代码:
/*
* hello.c - Canonical "Hello, World!" program
*/
#include <stdio.h>
int main(void)
{
printf("Hello,linux programming world!\n");
return 0;
}
命令行上键入以下命令编译和运行这段程序:
$gcc hello.c -o hello
$./hello
Hello, Linux programming world!
第一行命令告诉gcc对源代码hello.c进行编译和链接,并使用-o参数指定创建名为hello的可见程序.第二行命令执行hello这个程序,第三行是程序的执行结果.

其实,gcc首先运行预处理程序cpp来展开hello.c中的宏并在其中插入#include文件所包含的内容:然后把预处理后的源代码编译成为目标代码;最后,链接程序ld创建一个名为hello的二进制文件.

现在我们来通过手工操作重新创建这些步骤,以逐步执行编译过程.第一布是运行预处理器.使用-E选项告诉gcc在预处理后停止编译过程:
$gcc -E hello.c -o hello.cpp
此时查看hello.cpp会发现stdio.h的内容确实都插到文件里去了,而其他应当被预处理的标记也做了类似处理.
下一步是将hello.cpp编译为目标代码.可使用gcc的-c选项来完成:
$gcc -x cpp-output -c hello.cpp -o hello.o
-x选项告诉gcc从指定的步骤开始编译,在本例中也就是编译器处理后的源代码(cpp-output).
gcc是怎么知道如何处理某种特殊类型的文件呢?它是依靠文件的扩展名来决定如何正确处理该文件的.
——————————————————————————————
扩展名 类型
.c C语言源代码
.C,.cc C++语言源代码
.i 预处理后的C源代码
.ii 预处理后的C++源代码
.S,.s 汇编语言源代码
.o 编译后的目标代码
.a,.so 编译后的库代码
———————————————————————————————
最后,链接目标文件,生成二进制代码.
$gcc hello.c -o hello

‘贰’ 在linux下用GCC编译的C程序变量自加的结果和TC2.0下不一样

这个是c语言的“经典”问题,不同的编译器对公式的处理优先顺序不同。所以,在不能完全控制编译器环境时,千万不要随便的使用这种混成的公式。
印象里我曾经看到过专门讲解这个问题的文章。

‘叁’ 同一个程序vc++6.0和gcc运行的结果不同

软件版本所需条件不同而已,Windows和Linux肯定有区别,不用在意这些。

‘肆’ 为什么我写的.cpp文件 用gcc编译后会出现左图的结果为什么不像右图的结果

改用g++或gcc -lstdc++
对于文件名后缀为cpp的文件gcc编译器会自动认为是c++程序,编译阶段没问题,但是因为gcc命令不能自动和C++程序使用的库联接,所以连接时出错。因此需要手动加上-lstdc++参数或改用g++即可。

‘伍’ 关于同一段代码在gcc和dev-c++中结果不一样的问题

你的代码貌似有问题,我看花括号有不配对的。
最好把代码也贴上来。不要截图。

‘陆’ Linux下的gcc编译后生成Linux下的可执行文件,window下gcc编译后是exe文件,为什么不一样啊是怎么做到的

首先,这win和Linux下的gcc功能是一样的,实际的gcc.exe和linux下的gcc这两个文件不是一样的,他们毕竟需要在工作在不同的平台上,而且他们做的一些工作是有区别的。
编译过程是把源文件翻译成机器码,然后链接成一个整体,拼接成一个文件。不管是win下的exe还是Linux下的ELF,都是按照一定规范来的,比如头部放什么,尾部放什么,中间又存哪些信息等。但是,如果要编译出正确的可执行的文件,不同的操作系统里就必须按照不同的规范来组织这个文件。
这些文件的执行过程,并不是说它们可以直接执行,执行的时候,系统把它们从磁盘上,读到内存中,经过一系列的前期工作,才可以最终执行起来,这个前期过程都是操作系统来搞定的。
你不应该问gcc是怎么做到的,而应该问gcc为什么需要这样。如果你需要知道细节,去看《程序员的自我修养》

‘柒’ 为什么用GCC 编译这个不报错。。。但是就是结果不对呢。。。。name[20]可以用这样的输入方式吗

发现2个问题:
1。"%s,%c,%d" 在scanf里这样排,你输入的时候也必须以逗号分开,建议取消逗号,用回车键分开输好了
2.scanf那个要用 stu.name ,这个就是地址,没必要加其他的东西,你写的这样的方式是指 取出stu.name第20个字符的地址,而且这个地址已经越界了,最多到第19个字符

‘捌’ gcc编译错误!

提示说需要-fPIC编译,然后在链接动态库的地方加上-fPIC的参数编译结果还是报错,需要把共享库所用到的所有静态库都采用-fPIC编译一边才可以成功的在64位环境下编译出动态库。
这里的-fPIC指的是地址无关代码

你看看这里的这篇文章吧:http://www.cnblogs.com/lightsalt/archive/2011/10/19/2217628.html

阅读全文

与gcc编译链接后结果不同相关的资料

热点内容
马桶app怎么开通 浏览:592
军官和程序员哪个更好一点 浏览:244
一个和尚和一个女人的电影叫什么 浏览:510
手机外网服务器地址是多少 浏览:31
单片机外接锂电池供电 浏览:357
文件夹u盘锁 浏览:313
家佳源电影票 浏览:758
人间中不用解压 浏览:704
哪些网站可以免费看会员 浏览:309
python函数提示 浏览:524
cmd跟踪命令 浏览:266
电影下载免费网站推荐 浏览:364
泰国永恒无删减版 浏览:42
我的世界服务器如何更改地皮地形 浏览:505
山西联通app是什么软件 浏览:355
更新电视剧最快的网站 浏览:134
兄弟训诫文严厉 浏览:608
李楠程序员 浏览:288
山推管家app怎么改密码 浏览:682
贷款结束什么时候解压 浏览:142