c编译linux gcc 编译问题 没搞过啊,求帮助

下次自动登录
现在的位置:
& 综合 & 正文
linux 下编译c++y遇到的问题,(gcc只是c 语言编译器,g++是c++编译器)
这个问题一直困惑了我好久,一直都没有得到解决,说来真可笑,一个简简单单的hello.cpp最能折腾我这么多天。好了,今天总算是把这问题给解决了,由于考虑到和遇到同样问题的朋友,所以现在我就先把它给写上来,希望能让你们摆脱这种被编译器玩的困境,希望这篇能为和我一样奋斗在程式前线的朋友提供一些帮助。
//test.cpp
#include &iostream.h&
cout&&"hello word!"&&
我们编译 一下:
collect2: ld 返回 1
[hqlong@hqlong2008 ~]$ gcc test.cpp
在包含自 /usr/lib/gcc/i386-redhat-linux/4.1.0/../../../../include/c++/4.1.0/backward/iostream.h:31 的文件中,
从 test.cpp:1:
/usr/lib/gcc/i386-redhat-linux/4.1.0/../../../../include/c++/4.1.0/backward/backward_warning.h:32:2: 警告:#warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the &X& header for the &X.h& header for C++ includes, or &iostream& instead of the deprecated header &iostream.h&. To disable this warning use -Wno-deprecated.
/tmp/ccR8RPmI.o: In function `__static_initialization_and_destruction_0(int, int)':test.cpp:(.text+0x23):对‘std::ios_base::Init::Init()’未定义的引用
/tmp/ccR8RPmI.o: In function `__tcf_0':test.cpp:(.text+0x6c):对‘std::ios_base::Init::~Init()’未定义的引用
/tmp/ccR8RPmI.o: In function `main':test.cpp:(.text+0x8e):对‘std::cout’未定义的引用
:test.cpp:(.text+0x93):对‘std::basic_ostream&char, std::char_traits&char& && std::operator&& &std::char_traits&char& &(std::basic_ostream&char, std::char_traits&char& &&, char const*)’未定义的引用
:test.cpp:(.text+0x9b):对‘std::basic_ostream&char, std::char_traits&char& && std::endl&char, std::char_traits&char& &(std::basic_ostream&char, std::char_traits&char& &&)’未定义的引用
:test.cpp:(.text+0xa3):对‘std::basic_ostream&char, std::char_traits&char& &::operator&&(std::basic_ostream&char, std::char_traits&char& && (*)(std::basic_ostream&char, std::char_traits&char& &&))’未定义的引用
/tmp/ccR8RPmI.o:(.eh_frame+0x11):对‘__gxx_personality_v0’未定义的引用
collect2: ld 返回 1
分析一下上面错误的原因,大概是这么几点错误:
请使用标准的c++头文件,或者用&iostream&来替代&iotream.h&
一些在C++里的标准符号显示未定义.
使用#include&iostream&,得到的是置于名字空间std下的iostream库的元素;如果且用#include&iostream.h&,得到的是置于全局空间的同样的元素。在全局空间获取元素会导致名字冲突,而设计名字空间的初衷下是用来避免这种名字冲突的发生。其实没有&iostream.h&这样的东西,标准化委员会在简化非C标准文件时用&iostream&取代了它。但不有完全取消&iostream.h&的使用,并且很多编译器都同时支持&iostream&和&iostream.h&,不无无论那种编译器它肯定都是支持&iostream&。
这下相信大家应该知道是怎么回事了吧。让我们把代码再改一下。
#include&iostream.h& 改成 #include&iostream&
另外还得加上一句:使用名字空间。
好了,修改后的代码如下:
#include &iostream&
cout&&"hello word!"&&
再编译一下:
[hqlong@hqlong2008 ~]$ gcc test.cpp
/tmp/ccbcixwH.o: In function `__static_initialization_and_destruction_0(int, int)':test.cpp:(.text+0x23):对‘std::ios_base::Init::Init()’未定义的引用
/tmp/ccbcixwH.o: In function `__tcf_0':test.cpp:(.text+0x6c):对‘std::ios_base::Init::~Init()’未定义的引用
/tmp/ccbcixwH.o: In function `main':test.cpp:(.text+0x8e):对‘std::cout’未定义的引用
:test.cpp:(.text+0x93):对‘std::basic_ostream&char, std::char_traits&char& && std::operator&& &std::char_traits&char& &(std::basic_ostream&char, std::char_traits&char& &&, char const*)’未定义的引用
:test.cpp:(.text+0x9b):对‘std::basic_ostream&char, std::char_traits&char& && std::endl&char, std::char_traits&char& &(std::basic_ostream&char, std::char_traits&char& &&)’未定义的引用
:test.cpp:(.text+0xa3):对‘std::basic_ostream&char, std::char_traits&char& &::operator&&(std::basic_ostream&char, std::char_traits&char& && (*)(std::basic_ostream&char, std::char_traits&char& &&))’未定义的引用
/tmp/ccbcixwH.o:(.eh_frame+0x11):对‘__gxx_personality_v0’未定义的引用
collect2: ld 返回 1
怎么还是出现错误呢?还是说什么未定义之类的。
我也是琢磨了好几天也想不明白,这是什么原因,后来被一位仁兄给我指出,原来我们用的是c++编译器,我是记住了,希望你们也要记住,用g++编译,不是用gcc,gcc应该是编译C语言的。
我们再编译一下;
[hqlong@hqlong2008 ~]$ g++ test.cpp
OK,就这样,成功了,不过现在根本没有编译过的文件?因为我们没有把指定编译文件,当然会这样。如果我们指出编译文件,看一下会出现什么效果。
[hqlong@hqlong2008 ~]$ g++ -o test test.cpp
test为我们指定的编译后的输出文件:
我们现在浏览一下文件目录:
[hqlong@hqlong2008 ~]$ ls
mysql+php_apche.odt
mysqlproblem.odt
public_html
test就是我们刚才编译后生成的编译后的文件。我们现在来显示一下它:
[hqlong@hqlong2008 ~]$ ./test
hello word!
感谢上帝,hellow word!出来了。
就暂且写到这吧,以后如果有什么新的发现,我会一一贴上来的,希望朋友里支持我。
&&&&推荐文章:
【上篇】【下篇】PHP has encountered an Access Violation at 02C031B2共有 902 人关注过本帖
标题:安装gcc编译器的问题
来 自:湖北武汉
等 级:论坛游民
帖 子:63
专家分:42
结帖率:92.31%
&&已结贴√
&&问题点数:20&&回复次数:11&&&
安装gcc编译器的问题
我安装了MinGW-5.0.2.exe后,配置了环境变量,但运行gcc时,说不行执行,而且路径是d:\gcc\bin\g++.exe,我安装的位置是D:\MinGW,进入D:\MinGW\bin目录下执行gcc就是正常的,环境变量中没有d:\gcc\bin这一项,我记得之前安装过gcc(不是mingw),路径就是d:\gcc,但我已经全部删了,不知道为什么,求高手帮忙解决一下,谢谢了
附件: 只有本站会员才能下载或查看附件,请
搜索更多相关主题的帖子:
等 级:版主
威 望:178
帖 子:3294
专家分:21129
是删除不是卸载?
★★★★★为人民服务★★★★★
等 级:职业侠客
帖 子:190
专家分:337
路径设置不对。你的gcc安装在d:\mingw\下,而原来的路径指向的的D:\gcc\bin,
来 自:湖北武汉
等 级:论坛游民
帖 子:63
专家分:42
回复 2楼 cnfarer
原来那个gcc安装就只是个解压过程
来 自:湖北武汉
等 级:论坛游民
帖 子:63
专家分:42
回复 3楼 lwei
对啊,原来的早删了,d盘根本没有gcc这个文件夹,而且环境变量中也没有d:/gcc/bin这个路径,很奇怪。。。
来 自:china
等 级:贵宾
威 望:254
帖 子:11493
专家分:33241
MinGW貌似带一个安装包一类的东西罢 用那个装问题会少一点
等 级:千里冰封
帖 子:1554
专家分:10000
加入环境变量后就可以了,你gcc后面没有文件呢
控制系统中的C是怎么样的?欢迎来群一起交流进步
来 自:china
等 级:贵宾
威 望:254
帖 子:11493
专家分:33241
bash-3.1$ gcc -v
Using built-in specs.
COLLECT_GCC=E:\MinGW\bin\gcc.exe
COLLECT_LTO_WRAPPER=e:/mingw/bin/../libexec/gcc/mingw32/4.7.0/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.7.0/configure --enable-languages=c,c++,ada,fortran,objc,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgomp --disable-win32-registry --enable-libstdcxx-debug --disable-build-poststage1-with-cxx --enable-version-specific-runtime-libs --build=mingw32 --prefix=/mingw
Thread model: win32
gcc version 4.7.0 (GCC)
好像可以这么用
来 自:湖北武汉
等 级:论坛游民
帖 子:63
专家分:42
回复 8楼 zklhp
不知道什么意思。。。
我吧mingw卸载了,输入gcc还是一样,说无法执行d:/gcc/bin....
觉得是原来的那个没搞干净,原来那个是解压缩安装的,也没有配置过环境变量。。。
等 级:侠之大者
帖 子:279
专家分:432
拜托&&在命令行单单输入gcc是没用的&&&
你输入&&gcc&&--help&&试试
自由、民主、宪政!
版权所有,并保留所有权利。
Powered by , Processed in 0.025442 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved查看: 2011|回复: 6
ubuntu系统如何用gcc编译C语言代码
本帖最后由 数学疯子 于
07:26 编辑
假设我把C语言的源代码放在/home/wang/桌面/1.c& && &&&下面
我的问题被levibeta解决,他的方法:
输入 cc /home/wanghaojie/桌面/main.c
编辑没有错误
再输入&&./a.out
感谢解答: )
最简单的编译命令就是&&cc /home/wang/桌面/1.c
gcc 编译器的功能很多,命令也很多,详细的使用需要参考手册。
RE: ubuntu系统如何用gcc编译C语言代码
levibeta 发表于
最简单的编译命令就是&&cc /home/wang/桌面/1.c
gcc 编译器的功能很多,命令也很多,详细的使用需要参考 ...
我去试试,谢谢了
数学疯子 发表于
我去试试,谢谢了
另外,提个建议。以后碰到不会用的命令,建议先查看其 manpage。比如,命令 abc 不知道该怎么用,就可以输入 man abc,来查看其用法。这样学习 linux 的效率会更高些。
感谢解答: )
RE: ubuntu系统如何用gcc编译C语言代码
levibeta 发表于
另外,提个建议。以后碰到不会用的命令,建议先查看其 manpage。比如,命令 abc 不知道该怎么 ...
levibeta 发表于
另外,提个建议。以后碰到不会用的命令,建议先查看其 manpage。比如,命令 abc 不知道该怎么 ...
什么结果也没有,只有光标在闪
levibeta 发表于
最简单的编译命令就是&&cc /home/wang/桌面/1.c
gcc 编译器的功能很多,命令也很多,详细的使用需要参考 ...
再输入 ./a.out
成功了,谢谢
Copyright & KaFan & All Rights Reserved.
Powered by Discuz! X3.1( 苏ICP备号 ) GMT+8,}

我要回帖

更多关于 linux gcc 编译 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信