2

glewを使用して、単純なプログラムをリンクしようとしています

#include </usr/include/GL/glew.h>

int main (int argc, const char * argv[])
{

    glewInit();

    return 0;
}

XCode 4では、OSXLionの下でエラーが報告されます。

ld: library not found for -lGLEW.1.7.0
Command /Developer/usr/bin/clang++ failed with exit code 1

ただし、エラー出力では、リンカの次のフラグも報告されます

-mmacosx-version-min=10.7 -L/usr/lib -lGLEW.1.7.0 -lglfw -framework OpenGL -framework Cocoa

実際、libGLEW.1.7.0は/usr/libに存在します

さらに、プログラムを手作業で作成しようとすると、

  gcc -L/usr/lib -lGLEW.1.7.0 main.cpp

エラーが報告されていないa.outファイルを取得します(実行するとセグメンテーション違反が発生しますが、おそらくそれは予想されることです)

XCodeがこのエラーを生成する原因となる可能性のあるアイデアと、それを回避する方法についてのアイデアはありますか?

4

2 に答える 2

2

自分で GLEW をビルドしてインストールしましたが、OS X のメイクファイル内のプレーン gcc で同じ問題が発生し、https://github.com/jckarter/hello-glからコードをコンパイルしました。

次の手順で問題を解決しました。

  1. 私のGLEWライブラリ(libGLEW.aおよびlibGLEW.dylib)がディレクトリにインストールされていることがわかりました/usr/lib(他の人にはr権限を持つルートが所有していたことは間違いありません)。GLEW_LIB変数をメイクファイルからに変更しようとしまし/usr/libたが、まだ得られましたld: library not found for -lGLEW
  2. その後、コンパイルされたプログラムを静的ライブラリに対して直接リンクしようとしました(-lフラグなし)-そのために、コマンド-lGLEWから削除しgcc、それを直接リンクtライブラリに変更しました/usr/lib/libGLEW.a-コンパイルして正常にリンクしましたわかりました-最初に試すのは回避策です
  3. 次に、次のコマンドを使用してライブラリへの 2 つのリンクを作成しました。

    ln -s /usr/lib/libGLEW.a /usr/local/lib/libGLEW.a

    ln -s /usr/lib/libGLEW.dylib /usr/local/lib/libGLEW.dylib

そして最終的に元のメイクファイルで動作するようになりました(GLEW_LIB変数を に変更しただけです/usr/local/lib)。

おそらくGLEWmake installはライブラリを/usr/local/lib直接配置する必要があります。

于 2013-11-14T20:06:23.270 に答える
1

(leppieの提案に従って、これを質問の編集から削除し、回答として投稿しました)

元の投稿では重要ではないと考えていた詳細の中に答えが見つかったかもしれません。他の人が同様の問題に遭遇する可能性がある場合に備えて、ここに行きます。

どうやら、XCode4 プロジェクトはデフォルトで clang++ を使用しており、これはリンク段階でパラメーター -isysroot を受け入れます (明らかに ld は受け入れません)。

ここで、ビルド設定で (私の場合のように) ベース SDK が現在の Mac OS 以外のものとして定義されている場合、パラメーター -isysroot がその SDK を指すディレクトリの値と共に導入されます。したがって (これは私の推測) -L で含める可能性のある他のすべての lib ディレクトリの先頭にこれを追加します。

私の場合、 -L/usr/lib は事実上 -L/Developer/SDKs/MacOSX10.7.sdk/usr/lib に変わっていましたが、これは存在し、libGLEW を含んでいなかったため、「ライブラリが見つかりません」というエラーが発生しました。

于 2011-12-12T15:57:15.503 に答える