将多个.o文件组合成一个可执行文件

我试图将从C ++文件创build的目标文件合并到使用gcc的可执行文件中。 不幸的是, gcc给了我数千个undefined referencestring,数组等的undefined reference错误。

我在Windows机器上这样做,所以没有terminal命令; 只有cmd命令。

我只是在做:

 gcc ao bo co -o prgm.exe 

我错过了什么/错在哪里?

编辑:

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

然后,我做了g++ ao bo co -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[])在代码中

Solutions Collecting From Web of "将多个.o文件组合成一个可执行文件"

基于你的更新,那么我认为你需要做到以下几点:

 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存在基于标题的位置。

您正尝试将C ++程序与C链接程序链接起来。 你需要使用g++而不是gcc。

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

如果这不能解决你的问题,你可能想给我们一个更具体的描述你的错误和你的系统。

GCC是C编译器。 你的代码是C ++,所以你需要使用G ++做链接:

 g++ ao bo co -o prgm.exe 

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