2010-05-25 63 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引用该库指向编译器。

希望这会有所帮助。