1

cmake を使用して OS X 上の ogre や他のいくつかのライブラリに対してプログラムをリンクしようとしていますが、このエラーが発生し続けます。

ld: warning: directory '/Library/Frameworks/SDL.framework/Debug' following -L not found
ld: warning: directory '-framework Cocoa/Debug' following -L not found
ld: warning: directory '-framework Cocoa' following -L not found
ld: warning: directory '/System/Library/Frameworks/OpenAL.framework/Debug' following -L not found
ld: warning: directory '/Library/Frameworks/Ogre.framework/Debug' following -L not found
ld: warning: directory '/opt/local/lib/libogg.dylib/Debug' following -L not found
ld: warning: path '/opt/local/lib/libogg.dylib' following -L not a directory
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/ogre/Debug' following -L not found
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/ogre' following -L not found
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/openal/Debug' following -L not found
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/openal' following -L not found
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/oggvorbis/Debug' following -L not found
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/oggvorbis' following -L not found
ld: library not found for -lOgreMain
collect2: ld returned 1 exit status
Command /Developer/usr/bin/g++-4.2 failed with exit code 1

同じ cmake ファイルが Windows と Linux で動作します。ogre のサイトの SDK から取得した ogre 1.7.2 フレームワークにリンクしようとしています。これはリンクの問題であり、オーガの問題ではないと思います。cmake を使用したフレームワークへのリンクは、思ったほど直感的ではありません。これを修正する方法についてのアイデアはありますか?

4

1 に答える 1

5

まず、「システムが Mac OS X であることを意味するのではなく、APPLEが C/C++ ヘッダー ファイルで #defined であることだけを意味する」ことに注意してください。OS X の確認に使用します。${APPLE}IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

次の提案をテストするためのビルド環境がありませんが、試してみてください。

309行目と321行目にタイプミスがあります。である必要があります"${OGRE_INCLUDE_DIR}"(ではない${OGRE_INCLUDE_DIRS})。

327 行の 、${SDL_LIBRARY}${OPENAL_LIBRARY}、およびは、これらのライブラリのディレクトリへのパスである必要がある場合${OGG_LIBRARY}のライブラリファイルへのパスです。は、 で指定したライブラリを含むディレクトリをリンカーに通知します。link_directoriestarget_link_libraries

OGRE 以外の327 行目は、変数 (またはライブラリを含むディレクトリを示す同等のもの) をFindXXX.cmake定義しないライブラリ (SDL、AL、および OGG) を指定します。_LIB_DIRしたがって、その行は

link_directories("${OGRE_LIB_DIR}")

また、336 行目は正しい構文ではないようです。target_link_librariesターゲット (この場合は physgame ライブラリ) を最初の引数として受け取りますが、Ogre ライブラリのディレクトリへのパスを渡しています。ターゲットを定義するまでそのコマンドを呼び出すことはできないため、386 行目まで延期する必要があります。

行 386を次のように変更します。

target_link_libraries( ${PROJECT_NAME} OgreMain ${Bullet_LibraryNames} cAudio SDL )

に:

target_link_libraries(
    ${PROJECT_NAME}
    "${OGRE_LIBRARIES}"
    ${Bullet_LibraryNames}
    "${OPENAL_LIBRARY}" 
    "${SDL_LIBRARY}"
)

あなたも興味があるかもしれません: http://www.ogre3d.org/forums/viewtopic.php?f=1&t=58610&start=0

于 2011-02-13T21:17:53.093 に答える