2016-03-22 7 views
0

私はOSXコマンドラインgccを使用しており、動的ライブラリを構築しようとしています。私がビルドを行うとき、私は次の警告を受け取ります。どのようにして/ usr/libがこのライブラリを見つけられないのかはよく知られていますか?そして、/ usr/libには、確かにこれは私が使っているものですld:警告:オプションのディレクトリが見つかりません:-LC_ID_DYLIB =/usr/lib

私のマシン上に存在しない:

gcc -arch i386 cata/*.c -dynamiclib -o build/cata.dylib -LC_ID_DYLIB=/usr/lib 

おかげ

+0

と 'gcc'の間にある' -L'は、ライブラリを含むディレクトリへのパスを含むことが期待されるパラメータの先頭です。投稿された行がしようとしているように、環境変数を '/ usr/lib'に設定しています。それは正しくありません。 '-LC_ID_DYLIB'とは何ですか?プログラムでどのように使用されていますか? – user3629249

+0

パラメータ: '-dynamiclib'も有効なパラメータではありません。' http:// tigcc.ticalc.org/doc/comopts.html'ページを読むことをお勧めします。このページには、gccのすべての有効なパラメータがリストされています。 '-static'パラメータの使用とそのパラメータを使用しないことの違いを調べることができます。 – user3629249

+0

こんにちは、私のリンゴの開発者ガイドは両方のパラメータを使用するようにうまくいたと述べているようです。しかし、私は今それの回避策を持っているようです。私がビルドしようとしている動的ライブラリは、動的ロード文字列に 'build/cata.dylib'というパスを継承しています。 - それを使用したいものは、それらがどこにあるのかに関連して、 'build/cata.dylib'でそれを見つけなければなりません。非常に不便です。私はそれをどのように解決したか自分でそれに答えるだろう。 – Div

答えて

0

私はそれを作ることだった解決方法そうに捕まってしまった文字列ライブラリー(実行時にライブラリーを見つける場所)はどこにも相対的ではありません。 LD_LOAD_PATHを使用するように強制されます。

他のフラグを使用していた人がいました。

ので、私が使用して終了gccがこれです:

# my tree is like this 
# cata/*.c 
# build/*.dylib 
# 
cd build 
gcc -arch i386 ../cata/*.c -dynamiclib -o cata.dylib 

は、これを行う/は、それはそれは(基本的には、パスを持っていない)「を使用」は思っ同じディレクトリにライブラリを作るコンパイルします。私は今どこか別の場所に自由に置くことができます。後でコンパイル時に別のプログラムでリンクされた後に、

otool -L 

と表示され、ライブラリ名の前にパスがないと表示されます。これは明らかに、システムが標準ライブラリを見て、最終的にそれを見つけようとするときに好まれます(標準の場所の1つにインストールするので)。 -Lこれは、それが未発見できる作られた私は、問題を回避するためにリンゴのドキュメントを使用しようとしていた理由である

'build/cata.dylib' 

の必要な経路を有することを示したコマンドotoolオリジナルのように

、 。

これはLC_ID_DYLIBが機能しない理由を実際には解決しません。私はLoader.hファイル(643行目)を見て、識別子(0xd)、パス、構造体のための余地があるので、なぜ私のパスが拾われなかったのか分かりません。しかし、その2つの異なるトピック。 Loader.hはランタイムで、もう1つはgcc AFAIKです。私はまだリンゴを学んでいます。

関連する問題