編譯c文件出現undefined reference to `__gxx_personality_v0'
在linux編寫程序如下
這個程序的功能是研究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的
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的
posted on 2012-07-23 11:47 多彩人生 閱讀(1154) 評論(0) 編輯 收藏 引用 所屬分類: linux program