Chinaunix
标题:
gcc不正常编译的问题
[打印本页]
作者:
joyue
时间:
2006-12-28 13:40
标题:
gcc不正常编译的问题
我的源码,很简单的
//basetest.cpp
#include<iostream>
using namespace std;
int main(void)
{
std::cout<<"hello world!\n";
return 0;
}
执行:gcc basetest.cpp
显示如下错误:
/tmp/ccvNmx3I.o(.text+0x19): In function `main':
: undefined reference to `std::cout'
/tmp/ccvNmx3I.o(.text+0x1e): In function `main':
: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std:
perator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/tmp/ccvNmx3I.o(.text+0x4a): In function `__static_initialization_and_destruction_0(int, int)':
: undefined reference to `std::ios_base::Init::Init()'
/tmp/ccvNmx3I.o(.text+0x79): In function `__tcf_0':
: undefined reference to `std::ios_base::Init::~Init()'
/tmp/ccvNmx3I.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
作者:
picktracy
时间:
2006-12-28 13:45
g++
作者:
joyue
时间:
2006-12-28 13:48
gcc 不是能根据源文件后缀自动调用g++么?
作者:
joyue
时间:
2006-12-28 13:49
gcc不能自动连接c++库??如果没记错?
作者:
net_robber
时间:
2006-12-28 13:50
C++的代码,必须用g++
作者:
net_robber
时间:
2006-12-28 13:52
不然g++就失业了哦
另外,同一个编译器,处理两种不同的代码,效率能高么???
再说编译器也不是只靠.xx来确定代码类型的
那也不附合Unix的风格
作者:
net_robber
时间:
2006-12-28 13:53
原帖由
joyue
于 2006-12-28 13:49 发表
gcc不能自动连接c++库??如果没记错?
答:不可以
是人工 不是智能
作者:
joyue
时间:
2006-12-28 13:53
原帖由
joyue
于 2006-12-28 13:49 发表
gcc不能自动连接c++库??如果没记错?
确实的,我将源代码改为:
#include<stdio.h>
int main(void)
{
printf("hello world\n");
return 0;
}
用gcc就可以了
作者:
picktracy
时间:
2006-12-28 13:56
那是后端,不同的语言,编译器前端很难相同,但可以生成一样的中间代码,用一个后端处理。
作者:
fireman119
时间:
2006-12-28 13:56
lstdc++一定要的话应该是添加这个开关
作者:
net_robber
时间:
2006-12-28 14:11
正好路过一片资料,不过我没有测试。
楼主自己研究一下好了
http://www.linuxmine.com/3721.html
作者:
cjaizss
时间:
2006-12-28 14:21
原则上用g++,不要用gcc
用gcc请链接c++标准库stdc++
作者:
whyglinux
时间:
2006-12-28 14:31
>> gcc 不是能根据源文件后缀自动调用g++么?
gcc 和 g++ 是两个不同的命令,不存在互相调用的问题。
这两个命令对于文件扩展名的处理也不同:gcc 会根据文件类型自动区分是 C 还是 C++ 程序,而 g++ 总是认为它编译的是一个 C++ 程序,和文件扩展名无关。
>> gcc不能自动连接c++库??
是的,gcc 不会自动连接 c++ 标准库。因为 gcc 可用于连接 C 程序,也可用于连接 C++ 程序,显然连接 C 程序没有必要连接 C++ 库。如果用 gcc 连接 C++ 程序,需要显式指定连接 C++ 标准库:-lstdc++。
>> C++的代码,必须用g++
编译和连接 C++ 程序用 gcc 和 g++ 皆可,只是在连接的时候用 g++ 较方便些。
>> 另外,同一个编译器,处理两种不同的代码,效率能高么?
注意:基本上,C 是 C++ 的一个子集。因此,对 C 的绝大部分的处理都可以直接应用在对 C++ 的处理中而不存在什么效率问题。
作者:
net_robber
时间:
2006-12-28 14:36
回答够详细的。辛苦了
估计这个帖子应该没有什么问题了
作者:
langue
时间:
2006-12-28 19:07
gcc 这个前端,确实会自动根据源文件后缀,以及用户指定的参数,来决定将要使用的预处理程序,以及编译用的后端(通常是 cc1,cc1plus 等等)。而编译以后、汇编之时,用到的应该是同一个后端:as。再在连接的时候就不一样了,gcc 不负责自动给后端程序 ld 提供 C++ 程序必要的函数库文件名。
调用 gcc 的前端程序的时候,建议加上 -v 参数来查看整个过程的具体步骤。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2