2010-05-25 61 views
1

我在編譯我編寫的程序時遇到問題。我有兩個不同的文件具有相同的包括但只有一個生成時使用g ++標準x86_64庫中的編譯問題

/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib/crt1.o: In function `_start': 
/build/buildd/eglibc-2.10.1/csu/../sysdeps/x86_64/elf/start.S:109: undefined reference to `main' 
collect2: ld returned 1 exit status 

編譯下面的錯誤,我包括我的頭中的文件如下:

#include <google/sparse_hash_map> 
using google::sparse_hash_map; 

#include <ext/hash_map> 
#include <math.h> 
#include <iostream> 
#include <queue> 
#include <vector> 
#include <stack> 

using std::priority_queue; 
using std::stack; 
using std::vector; 

using __gnu_cxx::hash_map; 
using __gnu_cxx::hash; 

using namespace std; 

在網上搜索這兩條線沒有任何幫助我的東西。我會非常感謝任何建議。謝謝

+0

你可以給我們提供完整的源代碼,或者至少在main()之前的幾行文件中編譯失敗嗎? – ivans 2010-05-25 20:11:13

+0

嗨,謝謝你的提示。我遵循了你的一些建議,並意識到我不瞭解我編程的主要需求。以爲我可以編譯爲一個函數。似乎我有很多東西要學。 – user350282 2010-05-25 20:44:25

回答

1

你需要一個main功能,你沒有一個。如果您main功能,請顯示更多代碼。

0

看起來像main沒有定義。你有沒有爲你的第二個程序定義一個?你能發佈有關未能鏈接的源體的更多細節嗎?

+0

謝謝。這就是我需要弄清楚爲什麼我的代碼無法正常工作。需要定義一個main來調用我的函數。 – user350282 2010-05-25 20:45:28

4

要構建兩個獨立的程序您需要兩個源文件來定義main()函數。

要構建單個程序出兩個源文件 - 先編譯每個文件與-c選項(只編譯) - 你會得到兩個.o文件,然後鏈接這些文件一起。像這樣:

$ g++ -Wall -pedantic -ggdb -O -c -o module0.o module0.cpp 
$ g++ -Wall -pedantic -ggdb -O -c -o module1.o module1.cpp 
$ g++ -Wall -pedantic -ggdb -O -o prog module0.o module1.o 

從兩個源文件構建二進制prog

如果你需要一些庫鏈接,你就必須給它的頭與-I並與-L標誌的對象,然後告訴鏈接器實際上-l引用該庫指向編譯器。

希望這會有所幫助。