我正在尝试使用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[])
位于代码
答案 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
。