0

我正在尝试将使用 C++ 文件创建的目标文件合并到一个可执行文件中gcc。不幸的是,gcc这给了我成千上万的undefined reference字符串、数组等错误。

我在 Windows 机器上执行此操作,因此没有终端命令;只有 cmd 命令。

我只是在做:

gcc a.o b.o c.o -o prgm.exe

我错过了什么/做错了什么?

编辑:

我用 g++ 重新创建了 .o 文件: g++ a.cpp -g -c -Wall -std=c++0x -lSDLmain -lSDL -lSDL_image -lSDL_ttf -IC:\SDL-1.2.14\include -o a.o,其中 a.cpp 和 ao 是我保存文件的目录,而不是 g++ 目录

然后,我做到了g++ a.o b.o c.o -o prgm.exe。这给了几十个(我想这是一个改进?)错误,比如

undefined reference to `_SDL_SetColorKey'

但我包括 SDL 不是吗?

最终的错误是:

c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.7.0/../../../li
bmingw32.a(main.o):main.c:(.text.startup+0xa7): undefined reference to `_WinMain
@16'
collect2.exe: error: ld returned 1 exit status

int main(int argc, char * argv[])在代码中

4

3 回答 3

2

您正在尝试使用 C 链接器链接 C++ 程序。您需要使用g++而不是 gcc。

一般来说gcc,用于编译/链接 C,而g++用于 C++。gccIIRC通过根据文件扩展名进行调度来编译 C++ 代码。但是,将 C++ 代码与 gcc 链接不起作用,因为它不会链接 C++ 标准库,从而导致未定义的引用错误。

如果这不能解决您的问题,您可能需要更具体地描述您的错误和系统。

于 2012-08-20T22:40:39.720 回答
1

GCC 是 C 编译器。您的代码是 C++,因此您需要使用 G++ 进行链接:

g++ a.o b.o c.o -o prgm.exe

这会自动将 C++ 库添加到链接行,从而解决许多(如果不是全部)丢失的引用。

于 2012-08-20T22:40:18.877 回答
1

根据您的更新,我认为您需要执行以下操作:

g++ a.cpp b.cpp c.cpp -g -Wall -IC:\SDL-1.2.14\include -LC:\SDL-1.2.14\lib -std=c++0x -lSDLmain -lSDL -lSDL_image -lSDL_ttf  -o prgm.exe

我猜测C:\SDL-1.2.14\lib是否存在基于标题所在的位置。

于 2012-08-20T23:54:42.173 回答