将多个.o文件合并到可执行文件中

时间:2012-08-20 22:33:43

标签: windows g++ sdl object-files

我正在尝试使用gcc将从C ++文件创建的目标文件合并到可执行文件中。不幸的是,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和a.o是我保存文件的目录,而不是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[])位于代码

3 个答案:

答案 0 :(得分:2)

您正在尝试将C ++程序与C链接器链接。您需要使用g++代替gcc。

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分: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