5

C++ プログラムで SDL を使用しようとすると、次のようになります。

> g++ minimal.cpp SDLMain.m
Undefined symbols:
  "_main", referenced from:
      start in crt1.10.5.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

これが私のminimal.cppです:

#include <SDL/SDL.h>
int main(int argc, char **argv) {
    return 0;
}

http://www.libsdl.org/faq.php?action=listentries&category=7から収集できたのは、SDL.h をインクルードすることで、いくつかのマクロ マジックによってメイン関数の名前が変更されるということでした。しかし、SDLMain.m は、名前が変更された関数を呼び出すことによって、再び正常に機能するはずです。しかし、どういうわけかそれは起こっていませんか?

私はヒョウを実行しています。

これは質問 550455 とは別の問題であることに注意してください。

4

3 に答える 3

5

SDL sdl-config で提供されているツールを使用することもできます。

gcc sdltest.c -o sdltest `sdl-config --cflags --libs`
于 2011-09-06T04:30:59.033 に答える
3

解決策は、SDLホームページのSDL-devel-1.2.14-extras.dmgに含まれているSDLMain.mファイルを使用することでした。どういうわけか、以前使っていたものが不思議なことに動かなくなってしまいました。これが私の動作するコンパイルコマンドです:

g++ -framework SDL -framework Cocoa -I/usr/local/include/SDL/ minimal.cpp "/Library/Application Support/Developer/Shared/Xcode/Project Templates/SDL Application/SDLMain.m"
于 2010-02-25T02:07:34.467 に答える
1

構成: OSX 10.10.5 XCODE 7.0 SDL 1.2.15

再現方法:

  1. readme.txt で説明されているように、SDL.Framework を /Library/Frameworks にコピーしました。

  2. XCODE テンプレート > ビルド設定 > フレームワークで /Library/Frameworks としてパスを検索

  3. 次のように、main.cpp ファイルに SDL フレームワークを含めました。

    #include <SDL/SDL.h>

次に、コンパイルをブロックするクラス main の二重宣言が原因で、XCODE で SDL Framework をロードするときに同じ問題が発生しました。

これはエラーメッセージです:

Undefined symbols for architecture x86_64:
  "_main", referenced from:
     implicit entry/start for main executable
     (maybe you meant: _SDL_main)

これは私がそれをどのように解決したかです:

SDL.hに次のファイルがすべて含まれていることを確認しました。

#include "SDL_main.h"
#include "SDL_stdinc.h"
#include "SDL_audio.h"
#include "SDL_cdrom.h"
#include "SDL_cpuinfo.h"
#include "SDL_endian.h"
#include "SDL_error.h"
#include "SDL_events.h"
#include "SDL_loadso.h"
#include "SDL_mutex.h"
#include "SDL_rwops.h"
#include "SDL_thread.h"
#include "SDL_timer.h"
#include "SDL_video.h"
#include "SDL_version.h"

#include "begin_code.h"

それらの1つはSDL_main.hで、そのファイルには次のように表示されます。

#define main    SDL_main

この行は、main.cpp のクラス main と競合します。SDL_main.h でその行にコメントするか、SDL.h の #include "SDL_main.h" 行にコメントすると、問題が解決します。私はC++の初心者です(何年も前に大学で学んだばかりです)が、他の言語から、ライブラリを「ハッキング」することは非常に悪い習慣であることを知っています...ただし、MAXOSXとの特定の互換性の問題のようです.私は本当にXCODEを使いたい...

私は学習過程にあるので、修正してコメントし、はいまたはいいえを正当化してください.

乾杯!

于 2015-09-30T09:30:05.967 に答える