2

私はMac Mini、2012年後半(最新)、64ビット、Intel Core i7 2.3 gHz HyperThreading x86_64、または私のコンピューターで実行しています。私はC++を使用しているため、Xcodeのヘルプ(私が好む)はさらにまばらであるため、当面はCode::blocksも使用しています。そうは言っても、選択するプログラミング言語は C++ であり、最終的には Objective-C++ に拡張されますが、それはまた別の機会にします。

問題は次のとおりです。私は、ソースからコンパイルした SDL 1.2.15 を使用して、何を行うのかまだよくわかりません (これはテンプレートであり、今のところゲームであるとしましょう)。私のMacで。(SDLmain.mとSDL.hを使ってみたのですが、Objective-Cのコードばかりで、インターネット上でこれらをC++でコーディングできるかどうかの良い情報が見つからなかったので断念しました。)私がコンパイルしたソースは問題なく動作するようで、Code::Blocks はチュートリアルを問題なくコンパイルでき、問題なく動作します。ただし、ゲーム テンプレートを機能させることができないようです。エラーや警告なしで正常にコンパイルされますが、リンカーは同じことをしません。今、私は本当に何がわからないldコードをリンクしていることだけは知っています。(誰か詳しく説明したい人はいますか?) Code::Blocks がリンクステップに到達すると、次のメッセージで失敗します:

-------------- Clean: Debug in PyroLauncher ---------------

Cleaned "PyroLauncher - Debug"

-------------- Build: Debug in PyroLauncher ---------------

Compiling: App.cpp
Compiling: OnCleanup.cpp
Compiling: OnEvent.cpp
Compiling: OnInit.cpp
Compiling: OnLoop.cpp
Compiling: OnRender.cpp
Linking console executable: bin/Debug/PyroLauncher
Undefined symbols for architecture x86_64:
  "_SDL_GetError", referenced from:
      App::OnInit()     in OnInit.o
  "_SDL_Init", referenced from:
      App::OnInit()     in OnInit.o
  "_SDL_PollEvent", referenced from:
      App::OnExecute()     in App.o
  "_SDL_Quit", referenced from:
      App::OnCleanup()     in OnCleanup.o
  "_SDL_SetVideoMode", referenced from:
      App::OnInit()     in OnInit.o
  "_main", referenced from:
      start in crt1.10.6.o
     (maybe you meant: _SDL_main)
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
0 errors, 0 warnings

これは私を真剣に混乱させました。私のネイティブ アーキテクチャ x86_64 では ld が見つからないことだけはわかっています。誰かが私を助けることができれば、それは大歓迎です。解決策は次のとおりだと思います(ただし、方法はわかりません。)SDLは64ビット用にコンパイルされていないため、64ビットコードに対してコンパイルすることはできません。SDL は Objective-C 用にコンパイルされているため、C++ のコードでは使用できません。私のコードは 32 ビットで、SDL は 64 ビットで、互換性がありません。

4

2 に答える 2

1

ここで何が起こっているのか分かりますか?あなたのコードは、リンカ(ld)が見つけられない関数を呼び出しています。

2つの主な確率は、プロジェクトにさらにいくつかのファイルを含める必要があるか、いくつかのマクロを定義する必要があることです。

SDL_GetError()(およびその他の)の定義についてプロジェクトを検索します。見つからない場合は、それを宣言しているファイルを見つけて含める必要があります。

あなたがそれを見つけた場合、それはおそらく囲まれているでしょう、そしてあなたはあなたのプロジェクトオプション(あなたのコードではなく)で#ifdef XXXX定義しなければならないでしょう。xxxxほとんどの優れたIDE(私はNetBeansを使用しており、C +開発にはCygwinを使用しています)は、ifdef定義されていない場合はthenの内容をグレー表示するため、それが当てはまるかどうかをすぐに確認できます。

ところで、インストール手順については、SDLのWebサイトをご覧ください。または、ダウンロードに「Install」または「Install.txt」というファイルが含まれている場合や、Makefileが含まれている場合もあります。含まれている場合は、IDEで既存のmakefileからオプションProject /New...を探します。

お役に立てれば。

于 2012-11-21T01:36:37.073 に答える
0

ファイル SDLMain.m と SDLMain.h をプロジェクトに追加する必要があります。SDLMain ファイルにはグルー コードが含まれているため、SDL コードを Mac OS X で実行できます。Cocoa フレームワークをプロジェクトにリンクする必要もあります。SDL の Mac バージョンは Cocoa で記述されているため、Cocoa にリンクする必要があります。Cocoa フレームワークをリンクしても、Objective-C を使用する必要はありません。ゲームは C++ で記述できます。

Xcode 4 での SDL の設定に関する情報をお探しの場合は、次の記事をお読みください。

Xcode 4 で SDL を使用する

于 2012-11-21T20:07:00.610 に答える