質問

OpenGL、SDL、IL、別名DevIL、別名OpenILライブラリを使用しているサンプルソースコードをコンパイルしようとしています。OpenGL と SDL はネイティブ フレームワークとして利用できますが、DevIL は利用できません。そこで私がやったことは次のとおりです。

Homebrew経由でDevILをインストールしました。ILUTが必要なので、最初に数式を変更しました。

brew edit devil

次に、これらの行を編集しました

def install
  system "./configure", "--disable-debug", "--disable-dependency-tracking",
                        "--prefix=#{prefix}", "--enable-ILU"
  system "make install"
end

そのようです

def install
  system "./configure", "--disable-debug", "--disable-dependency-tracking",
                        "--prefix=#{prefix}", "--enable-ILU", "--enable-ILUT"
  system "make install"
end

そしてすべてをインストールしました

[sudo] brew install devil

これにより、DevIL ヘッダーが得られます /usr/local/include/ および動的ライブラリ /usr/local/lib/. 。次に、次の手順でライブラリをプロジェクトに追加しました。

  • 私の唯一のターゲットを右クリックします
  • 「追加 > 既存のフレームワーク」をクリックします。
  • 「ダイリブ」を選択します
  • 追加 libIL.dylib, libILU.dylib そして libILUT.dylib

(もあります libIL.1.dylib, libILU.1.dylib そして libILUT.1.dylib リストにありますが、それは正常ですか?)

次に、「プロジェクト > プロジェクト設定の編集 > ビルド > その他のリンカー フラグ」に次のフラグを追加しました。

-lil -lilu -lilut

プロジェクトをコンパイルしてリンクしようとすると、次のエラーが発生します。

Ld "build/Debug/XCode OpenGL OOP Framework.app/Contents/MacOS/XCode OpenGL OOP Framework" normal i386
cd "/Users/padde/Documents/Studium/sem5/computergrafik/opengl intro/xcode projects/XCode OpenGL OOP Framework"
/Developer/usr/bin/g++-4.2 -arch i386 "-L/Users/padde/Documents/Studium/sem5/computergrafik/opengl intro/xcode projects/XCode OpenGL OOP Framework/build/Debug" "-F/Users/padde/Documents/Studium/sem5/computergrafik/opengl intro/xcode projects/XCode OpenGL OOP Framework/build/Debug" -filelist "/Users/padde/Documents/Studium/sem5/computergrafik/opengl intro/xcode projects/XCode OpenGL OOP Framework/build/XCode OpenGL OOP Framework.build/Debug/XCode OpenGL OOP Framework.build/Objects-normal/i386/XCode OpenGL OOP Framework.LinkFileList" -framework Foundation -framework AppKit -framework GLUT -framework OpenGL -framework SDL -lIL -lILU -lILUT -o "/Users/padde/Documents/Studium/sem5/computergrafik/opengl intro/xcode projects/XCode OpenGL OOP Framework/build/Debug/XCode OpenGL OOP Framework.app/Contents/MacOS/XCode OpenGL OOP Framework"

ld: warning: in /usr/local/lib/libIL.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /usr/local/lib/libILU.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /usr/local/lib/libILUT.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
Undefined symbols:
  "_ilInit", referenced from:
      RenderEngine::initManagers()       in RenderEngine.o
  "_ilGetData", referenced from:
      TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
  "_ilBindImage", referenced from:
      TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
  "_ilLoadImage", referenced from:
      TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
  "_ilGenImages", referenced from:
      TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
  "_ilGetInteger", referenced from:
      TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
      TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
      TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
      TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
  "_ilDeleteImages", referenced from:
      TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
      TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
      TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
  "_main", referenced from:
      start in crt1.10.6.o
     (maybe you meant: _SDL_main)
ld: symbol(s) not found
collect2: ld returned 1 exit status

どうやら、 .dylib ファイルが正しく構築されていないため、シンボルが見つかりません。これを機能させるにはどうすればよいですか?私は何か間違いを犯しましたか?私のプロジェクトで動作するようにライブラリを別の方法でビルドする方法はありますか、またはプロジェクトのビルド アーキテクチャを何らかの方法で変更することはできますか?

手伝ってくれてどうもありがとう!

役に立ちましたか?

解決

醸造式を次のように編集することで問題を解決しました。

def install
  system "./configure", "--disable-debug", "--disable-dependency-tracking",
                        "--prefix=#{prefix}", "--enable-ILU", "--enable-ILUT",
                        "CFLAGS=-arch i386", "CXXFLAGS=-arch i386"
  system "make install"
end
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top