标准x86_64库中的编译问题

时间:2010-05-25 20:08:09

标签: c++ linker compiler-errors

我在编写我编写的程序时遇到了问题。我有两个不同的文件具有相同的包含,但只有一个文件在使用g ++编译时生成以下错误

/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;

在互联网上搜索这两行并没有给我带来任何帮助。我会非常感谢任何建议。谢谢

3 个答案:

答案 0 :(得分:4)

要构建两个单独的程序,您需要两个源文件来定义main()函数。

从两个源文件构建单个程序 - 首先使用-c选项编译每个文件(仅编译) - 您将获得两个.o个文件,然后< em>链接这些文件在一起。像这样:

$ 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标志的对象,然后告诉链接器实际引用该库{ {1}}。

希望这有帮助。

答案 1 :(得分:1)

您需要一个main功能而没有功能。如果您执行具有main功能,请显示更多代码。

答案 2 :(得分:0)

看起来main未定义。你有第二个项目的定义吗?您是否可以发布有关未能链接的源体的更多详细信息?