2011-03-26 13:49:18|  分类: 默认分类 |  标签: |字号 订阅

1. Linux Develop Notes

    * 编译 c++ 程序需要添加 -lstdc++   sample: gcc -lstdc++ -o test test.c,否则会报 "undefinedreference to '__gxx_personality_v0' " 错误

2. 唉,用gcc命令编译C程序,用g++命令编译C++程序。

g++和gcc本质一样的,本质上还是gcc,我们实验室所有的c++程序都是用gcc编译的,一般的程序用gcc足够了。 对于 C++ 程序,编译的时候用 gcc 或者 g++ 都可以。但是在进行连接的时候最好用 g++,因为用 g++ 会自动进行 C++ 标准库的连接;用 gcc 连接 C++ 程序也可以,但是需要人为指定连接 C++ 标准库,否则就会出现 undefined reference to `__gxx_personality_v\0' 之类的错误。

可见-lstdc++ 所对应的是标准C++库


-

在linux编写程序如下
QUOTE:
#include
#include
#include
int count=0;
void ctrl_c_count(int);
main()
{
int c;
void (*old_handler)(int);
old_handler=signal(SIGINT,ctrl_c_count);
while((c=getchar()!='\n'))
;
printf("Ctrl_C count=%d\n",count);
signal(SIGINT,old_handler);

}
void ctrl_c_count(int i)
{
printf("Ctrl_C\n");
count++;
}

这个程序的功能是研究signal函数的应用.
signal 函数是用于设置信号量的处理函数为自定义的。
SIGINT是用户在终端上按下ctrl+c的而产生信号量
它的系统默认的处理函数为终止正运行的进程
现在把它改成按ctrl+c后,是全局变量count加1的操作
当用户在终端输入回车后该进程结束。
且又把SIGINT的处理函数为默认的。

当我把上述程序保存为t.cpp时
利用gcc -o t t.cpp
产生如下错误
/tmp/ccGsoxH2.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
解决方法用 gcc -o t t.cpp -lstdc++
为什么会出现这个错误:是因为你用gcc编译.cpp文件.按系统默认.cpp文件是c++的文件格式
另一个方法是用g++ -o t t.cpp 也是可以的
还有一种方法是把文件保存为.c格式,反正里面全是c的代码
然后用gcc -o t t.c或者是g++ -o t t.c 都是OK的

Logo

更多推荐