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编写程序如下
#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的 |