我已經得到使用此命令行這種不確定的標誌性建築:未定義的符號___gxx_personality_v0鏈路
$ gcc test.cpp
Undefined symbols:
"___gxx_personality_v0", referenced from:
etc...
TEST.CPP簡單,應該建立罰款。這筆交易是什麼?
我已經得到使用此命令行這種不確定的標誌性建築:未定義的符號___gxx_personality_v0鏈路
$ gcc test.cpp
Undefined symbols:
"___gxx_personality_v0", referenced from:
etc...
TEST.CPP簡單,應該建立罰款。這筆交易是什麼?
使用
g++ test.cpp
代替,因爲這是C++代碼。
或者,如果你真的想用gcc
,添加-lstdc++
到命令行,像這樣:
gcc test.cpp -lstdc++
運行md5
針對每個場景下產生的a.out
表明,它是相同的輸出。
但是,是的,g++
可能會讓你的世界變得更簡單。
雖然gcc是識別cpp文件的前端,並將其傳遞給正確的編譯器。 – paxdiablo 2008-10-15 02:41:38
@Pax暗黑破壞神:是的,它使用了正確的_compiler_,但是,g ++將libstdC++傳遞給鏈接器,而gcc則沒有。 :-P – 2008-10-15 02:43:24
.cpp
擴展會導致gcc
將您的文件編譯爲C++文件。 (見GCC docs。)
嘗試編譯相同的文件,但其重命名爲有.c
擴展:
mv test.cpp
gcc test.c
或者,您也可以明確地傳遞-x c
編譯器指定的語言:
gcc -x c -c test.cpp -o test.o
如果您運行這些C語言版本nm test.o
,你會發現,___gxx_personality_v0
未列爲符號。
(如果你與gcc -c test.cpp -o test.o
生成的對象文件運行相同的命令,該___gxx_personality_v0
符號出現。)
萬一有人有同樣的問題,因爲我:文件擴展名應該是.c
不是.C
(gcc區分大小寫)。
有同樣的問題,但不同的解決方案:
C++代碼在靜態庫得到的聯繫,並通過一個.m文件被引用。將.m文件重命名爲.mm修復了問題。
如果不是太長,我們可以查看代碼嗎? – jjnguy 2008-10-15 02:38:30