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++ 用です。IIRC コンパイル C++ コードはgcc、ファイル拡張子に従ってディスパッチすることで機能します。ただし、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 に答える