不会gcc 哪位大神可以知道下 gcc编译器与vs编译器能过 dev c++没有编译问题 但是运行错误

&&&您需要以后才能回答,未注册用户请先。dev c++中文版|Dev-C++下载 v5.11中文版(32位&64位)_ - pc6下载站这段时间跟同事在开发过程中碰到过一些编译器报错,后来通过查阅资料基本都解决了,这里将遇到的一些问题记录下来。
1、使用gcc命令编译c++程序遇到错误。
需要明确的是,gcc是可以编译c++程序的。gcc,原名GNU C Compiler,最初是C语言的编译器,但经过发展之后,它变成了一个可以支持C++、Fortran、Pascal、Objective-C、Java、Ada,以及Go与其他语言编译的编译器套件,其名称也因此改为了GNU Compiler Collection。g++便是其中的一部分,用于处理c++语言。虽然大多数情况下,我们直接使用g++命令来编译c++程序,但直接使用gcc命令也可以编译c++程序的,当然前提是安装了g++(gcc-c++)模块。gcc命令会根据源程序的后缀名来决定实际使用的编译器,编译过程与直接使用g++完全一样,但是,链接过程有点不同。g++命令会自动给你加上c++标准库的链接,但gcc命令却不会给你自动加上,因些需要手动加上。例如如下的程序:
#include &iostream&
int main()
std::cout && "Hello World!" && std::
return <span style="color: #;
使用gcc命令编译会报undefined reference的错误,使用g++命令就不会,但是使用gcc命令加上stdc++的链接库就可以成功编译。所以,如果是编译c++程序,最好还是使用g++命令编译吧。
2、undefined reference to XXX的问题
这个问题应该说是非常常见的一个问题了,通常情况下,这个问题是由于你使用了第三方的库文件,却没有加上相应的库的链接,导致编译器找不到符号。这种情况也比较好解决,只要加上链接库就可以了,具体命令有两种写法,一是使用-L和-l参数指定库的路径和库名,其中,库的文件名必须为libxxx.so或者libxxx.a的形式,其中的xxx就是库名,跟在-l参数后面;第二种是直接写上库的文件名(相对路径、绝对路径都可以),这种写些就是直接当这个库文件是一个.o文件(目标文件)进行链接。
不过有时候,明明已经写上了链接库,可还是会有undefined reference的错误,这个候,可能就是链接顺序的问题了。同样是上述简单的hello.cpp,我们使用gcc命令编译(不用g++命令是因为它自动加了stdc++的链接库,我们不好改顺序)
可以看到,虽然加上了-lstdc++,但还是有undefined reference的错误。这是因为链接器在进行链接的时候,是从前往后找符号的。由于libstdc++.so库中的的符号(std::cout,std::endl)是在hello.o(由hello.cpp编译而来)中使用的,因此,当链接器从左至右抛描库文件时,第一个碰到了stdc++库,发现并没有使用这个库中的符号,于是就将这个库给丢弃不用了,继续往后链接hello.o的时候,发现了其中要使用一些符号,而这些符号是stdc++中的,而stdc++库已经被链接器给扔了,所以就找不着了,就有了undefined reference。解决的方案也是两个:一是按引用顺序写链接的目标文件的顺序,如果是编译可执行程序,就从包含main函数的.o文件开始写,最基础的库写在最右边;二是加上-Wl,--as-needed参数,这个参数会将库文件中加入NEED标识,而不管这个库文件有没有用到(也就是告诉链接器,那个暂时没用到的库先别扔了)。但是第二种方法好像对stdc++这个库没什么作用,其他的第三方库可以,具体原因是什么还不太清楚,所以,最好写编译选项的时候,库文件还是按引用顺序写吧。
阅读(...) 评论()哪位大神帮忙看一下这段C++代码有什么错误?和《C++primer》上一样,在GCC下就是不能运行_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
哪位大神帮忙看一下这段C++代码有什么错误?和《C++primer》上一样,在GCC下就是不能运行
#include &iostream&
#include &string&
#include &vector&
int main()
vector&string&
cout && &Please enter some strings (Ctrl-Z to end):& &&
while(cin && str)
我有更好的答案
目测无误. VC2010实测也无误.
附加一下GCC的编译错误信息哦.
错误太长,你把你的qq给我,我加你,然后把问题发给你
QQ 错误太长就把前面部分发上来看看吧.
采纳率:65%
分别在 GCC 4.7 和 GCC 4.8 下,测试正常,没有出现你说的不能运行。
为您推荐:
其他类似问题
gcc的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;

我要回帖

更多关于 vs设置gcc编译 的文章

 

随机推荐