2012-06-27 110 views
0

所以我想用g ++創建一個exec。我的命令如下:g ++忽略頭文件

g++ -o project21 main.cpp tools.hpp file.hpp FileInfo.cpp file.cp tools.cpp 

我得到一個錯誤

ld: warning: ignoring file tools.hpp, file was built for unsupported file format which is not the architecture being linked (x86_64) 
ld: warning: ignoring file file.hpp, file was built for unsupported file format which is not the architecture being linked (x86_64) 

這裏的行爲是奇怪的是,我可以編譯它在Xcode和使用exec就好了它只是在外殼我有問題。

+3

爲什麼你需要編譯'.hpp'文件?您需要從您的cpp文件中包含它們,而不是將它們傳遞到命令行。 – dasblinkenlight

+0

@dasblinkenlight如果我嘗試運行編譯後的代碼,我會得到段錯誤11 –

+0

如果Xcode構建起作用,您可以在Xcode中重新構建,並[查看構建命令](http://stackoverflow.com/a/4303974/) 335858),看看它有什麼不同。 – dasblinkenlight

回答

0

嘗試刪除可能已由Xcode內部版本創建的任何*.gch文件,然後再嘗試使用g++命令。

但是,一般情況下,我會盡量讓事情沒有預先編譯頭文件,然後添加預編譯頭部優化(如果有必要)(即,不要將.hpp文件明確傳遞給編譯器直到你有其他所有工作,並且只有你真的需要時)。

1

您不需要編譯hpp文件。將它們包含在.cpp文件中。

即使您在項目中包含hpp,Xcode也不會編譯它們,除非您明確要求它(我的Mac正在工作,但如果我記得單擊該項目(左側樹的根目錄) ,單擊一個目標並檢查選項卡的構建階段,這是一個包含要編譯的文件的列表)。

關於分段錯誤,如果它缺少源文件(即,您在.hpp文件中添加了真正應該位於.cpp文件中的代碼),則會出現鏈接錯誤,而不是分段錯誤。分段錯誤還有其他原因,在GDB上運行並進行調試(使用-g進行編譯以便能夠調試)。以下是一些可能性:

  • 如果您正在爲不同的平臺構建,則問題可能是某些平臺特定的代碼。
  • 編譯器不兼容:假設您在LLVM中使用Xcode,您可能有一些代碼與LLVM一起使用,但與gcc的行爲不同。很不可能(根據我對這些編譯器的經驗,我可以說他們非常兼容),但仍然有可能。