一個在mac上編譯c++程序的低級失誤

今天在編譯hadoop的pipes的wordcount例子時,老是報錯不能成功。c++

g++ -m64 -I/Users/stephen/Downloads/hadoop-0.20.2/c++/Mac_OS_X-x86_64-64/include wordcount.cpp -Wall -L/Users/stephen/Downloads/hadoop-0.20.2/c++/Mac_OS_X-x86_64-64/lib -lhadooppipes -lhadooputils -lpthread -g -O2 -o wordcount
ld: can't open output file for writing: wordcount, errno=21 for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [wordcount] Error 1xcode

其中關鍵問題是紅色字的部分,覺得是xcode的g++問題,還一度準備安裝gcc。也覺得是編譯過的pipes靜態庫的問題,用ant把整個hadoop中c++有關的都編譯了一次,反覆檢查嘗試後仍是不行。編譯選項-m64也換過-m32。。。oop

後來不經意在google查到一個相似錯誤的討論(仍是stackoverflow,以前不以爲是這個緣由,但慢慢已經感受不是編譯器和靜態庫的問題,而是mac不能連接出object程序,由於已經能夠編譯連接出a.out來使用,都正常),看完後總算髮現一個小細節:mac編譯連接時其實會生成一個同名目錄,並且默認大小寫不敏感。我在同一個目錄下有個WordCount的目錄,而個人makefile中的target是wordcount,沒想到兩個細節問題的集合居然致使連接失敗。google

最終把target的名稱換成wordcountmap立刻OK,一切都安靜了。spa

相關文章
相關標籤/搜索