4

に設定LIBRARY_SEARCH_PATHS/opt/local/lib、問題のライブラリがそこにあることを確認しました (私は にリンクしていGLEWます):

$ls /opt/local/lib

libGLEW.1.5.1.dylib libfreetype.a       libz.a
libGLEW.1.5.dylib   libfreetype.dylib   libz.dylib
libGLEW.a       libfreetype.la      pkgconfig
libGLEW.dylib       libz.1.2.3.dylib
libfreetype.6.dylib libz.1.dylib

しかし、Xcodeは私にリンカエラーを与えます

library not found for -lGLEW

私は CMake で Xcode プロジェクトを生成しているので、Xcode プロジェクトを明示的に変更したくありません (フレームワークなどとして追加することを誰かが提案した場合)。Xcodeは(この質問USER_HEADER_SEARCH_PATHSのように)うまく認識します。なぜここでうまくいかないのですか?

4

2 に答える 2

2

おそらく、CMakeLists.txt にこのようなものを追加しますか?

find_library(GLEW_LIB GLEW /opt/local/lib)
if(NOT ${GLEW_LIB})
  message(FATAL_ERROR "Could not find GLEW")
endif()
target_link_libraries(myprogram ${GLEW_LIB} ...)

myprogram は、ライブラリとリンクする必要があるターゲット実行可能ファイルの名前です。... を、その実行可能ファイルで使用している他のライブラリに置き換えます。

このようにして、CMake がライブラリ パスの詳細を処理します。

于 2009-04-16T22:05:56.460 に答える
1

Xcode は潜在的に複数の SDK で動作するため、これらの種類のもの (HEADER_SEARCH_PATHS や LIBRARY_SEARCH_PATHS など) を定義するたびに、現在の SDK ルートがリンカーに渡される実際のパスに付加されます。

したがって、これを機能させる 1 つの方法は、ディレクトリを SDK に追加することです。たとえば、Mac OS X 10.5 sdk でビルドしていると仮定すると、opt dir を追加できます。

ln -s /opt /Developer/SDKs/MacOSX10.5.sdk/opt

ライブラリがシステム上に見つかります。

これを行いたくない場合は、CMake を調べて、実際のライブラリのライブラリ要件を生成する方法を見つける必要があります (私は CMake について何も知らないので、私は助けることができません)。そこのあなた)。これが、他の質問で USER_HEADER_SEARCH_PATHS と HEADER_SEARCH_PATHS の違いが見られる理由でもあります。

別のオプションとして、OTHER_LDFLAGS ビルド変数でこのパスを指定することもできます。

OTHER_LDFLAGS=-L/opt/local/lib

これにより、リンカーは /opt/local/lib とその標準パスを検索するようになり、別のプロジェクト ファイルを生成する必要がなくなります。

于 2009-04-16T21:48:09.013 に答える