我無法解釋我在鏈接我的代碼時看到的行爲。也許有人有一個想法是怎麼回事...包含語句在鏈接步驟中的順序如何?
我有使用GNU Automake工具作爲其構建系統(所有Linux下)的多個文件C++項目。
添加源文件和頭文件後(讓我們稱之爲util.cc
和util.h
)到項目,並具有調用來自新添加的文件,我具體情況取決於include
得到一個鏈接錯誤的功能已經存在的源文件(calc.cc
)聲明出現。我再說一遍:錯誤發生在鏈接步驟中,編譯運行良好!
例子:
calc.cc:
#include "file1.h"
#include "file2.h"
#include "file3.h"
#include "file4.h"
#include "util.h" // new header
該版本編譯罰款:
我時,把新的包含語句在預先存在的語句的結束,就像得到一個錯誤。但鏈接產生一個錯誤(未找到符號)!
現在,當改變這
#include "util.h" // new header
#include "file1.h"
#include "file2.h"
#include "file3.h"
#include "file4.h"
然後編譯和連接運行正常!
由於鏈接只讀取.o
文件,這一定意味着不同的內容取決於其中包括出現語句生成。怎麼會這樣?
編譯爲g ++(GCC)4.4.6
有可能是在'util.h'中定義的宏防止被包括在隨後的頭文件中的一個的函數或變量聲明。 – hmjd 2012-07-20 10:29:40