Snow Leopard にアップグレードし、Xcode 3.2 をインストールしてから、iPhone SDK 3 for SL をインストールしました。
プロジェクトで、ビルド時に次のエラーが発生するようになりました。
ld
: ライブラリが見つかりません-lcrt1.10.6.o
私はネットで検索しましたが、役立つものは何も見つかりません。
Snow Leopard にアップグレードし、Xcode 3.2 をインストールしてから、iPhone SDK 3 for SL をインストールしました。
プロジェクトで、ビルド時に次のエラーが発生するようになりました。
ld
: ライブラリが見つかりません-lcrt1.10.6.o
私はネットで検索しましたが、役立つものは何も見つかりません。
プロジェクト設定の編集->ビルドタブ->MacOS X展開ターゲットの場合、XCode 3の場合は10.5に変更し(10.6の場合でも10.6ではありません)、それが役立つかどうかを確認します。
XCode 4の場合、10.6に設定する必要があります
PSリリースやデバッグだけでなく、すべてのターゲットに設定してください。(もしあなたがそうしなかったら、一方は失敗し、もう一方は失敗しませんでした)
~/.profile に以下を追加します (Mac OS X 10.5 の場合):
export C_INCLUDE_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/include
export LIBRARY_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/lib
Makefile に以下を追加することで、この問題を修正できました。
CFLAGS="$(OTHER_CFLAGS) -mmacosx-version-min=10.5"
LDFLAGS="$(OTHER_LDFLAGS) -mmacosx-version-min=10.5"
表向きは、これは Xcode の外部でビルドする場合にのみ必要です。この問題は、ここで私の経験を共有することが有用であると考えるのに十分長い間私を苛立たせました.
/usr/lib からライブラリを取得しているように見えますが、これは iPhone SDK にはまったく不適切です。ライブラリ検索パスに /usr/lib を追加するようにビルド設定を変更したと思います。/usr/lib はコンパイラの標準検索パスにあるため、これはそもそも完全に不要なはずですが、このように変更された検索パスが必要な場合は、$(SDKROOT)/usr/lib
代わりに使用してください。
コンパイラは通常crt1.o
、crt[i/n].o および crt[begin/end].o と組み合わせて使用して、コンストラクタとデストラクタ (main と exit の前後に呼び出される関数) をサポートします。
このエラーは、特定の展開ターゲットのライブラリ ファイルが見つからないことが原因である可能性があります。
まず、次のような調査を行います。
すべての展開ターゲットを一覧表示します。
ls -la /Developer/SDKs
crt1
どの環境にどのライブラリがあるかを調べる
find /Developer/SDKs -name crt1\*
次のようなものが表示されます。
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/crt1.10.5.o
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/crt1.o
/Developer/SDKs/MacOSX10.6.sdk/usr/lib/crt1.10.5.o
/Developer/SDKs/MacOSX10.6.sdk/usr/lib/crt1.10.6.o
/Developer/SDKs/MacOSX10.6.sdk/usr/lib/crt1.o
上記の例でわかるように、crt1.10.6.o
MacOSX10.5 には がありません。
他の環境を指す欠落ファイルへのリンクを作成することで解決できます。または、展開ターゲットを変更することもできます。例えば
ln -s /Developer/SDKs/MacOSX10.6.sdk/usr/lib/crt1.10.6.o /Developer/SDKs/MacOSX10.5.sdk/usr/lib/
欠落している他の理由はgcc
、システムに別のものがインストールされている可能性があることです。例えば:
which gcc
xcrun -find gcc
brew list | grep gcc; brew list gcc47
したがって、make を使用してコンパイルする場合、実際には CC 変数によって適切なコンパイラを指定できます。例えば
CC=/path/to/gcc-3.4 make
また、gcc の適切なターゲット展開環境変数を指定することもできます。たとえば、次のようになります。
export MACOSX_DEPLOYMENT_TARGET=10.5
これが機能する場合は、このライブラリ パスをシェル プロファイルに追加できます ( ~/.profile
)。例えば
export C_INCLUDE_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/include
export LIBRARY_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/lib
または、それらを一時的にエクスポートします。
conftest.c
次のコードでサンプル ファイルを作成します。
#ifdef __GNUC__
yes;
#endif
そして、次の方法でコンパイルしてみてください:
gcc conftest.c
cc conftest.c
cc conftest.cc conftest.c
展開ターゲットをコンパイラのデフォルトに設定すると、問題が解決しました。他は何も変更しないでください。
Fortran Makefile で同じ問題が発生しました。コンパイラの後に次のオプションを追加しました (OSX 10.5 の場合):
-L/Developer/SDKs/MacOSX10.5.sdk/usr/lib
例えば、
g77 -L/Developer/SDKs/MacOSX10.5.sdk/usr/lib
これで、コンパイラは必要なライブラリを見つけます!
同じエラー メッセージが表示されました。上記の解決策はどれもうまくいきませんでした。xcodeproj ファイル内の *.pbxuser および *.mode1v3 ファイルを削除して解決しました。
これで数時間を無駄にしました...
興味深いことに、私にとって問題は Simulator-Debug のみでした。Simulator-Release または Device Debug/Release に不満はありませんでした。
とにかく、展開ターゲットを10.5に変更すると、これが解決しました!!
この問題は、Mac OS X Deployment Target を 10.5 に設定し、その後 Compiler Default に戻すことで解決しました :)
あるマシンで Xcode 4 を使用し、別のマシンで Xcode 3.2.6 を使用していたときに、この問題が発生しました。2 つのバージョンは、それらの間で .xcodeproj ファイルを交換できるはずですが、project.pbxproj ファイル (.xcodeproj ディレクトリ内) には、次のような場所がまだいくつかあることがわかりました。
MACOSX_DEPLOYMENT_TARGET = 10.6;
Xcode を終了し、3 つのオカレンスを次のように変更しました。
MACOSX_DEPLOYMENT_TARGET = 10.5;
プロジェクトを再開した後、再度ビルドできました。うわー!
~/.profile に以下を追加します (Mac OS X 10.5 の場合):export C_INCLUDE_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/include export LIBRARY_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/lib
Kirandan の限られたシナリオ (Snow Leopard、Xcode 3.2.1、iphone、ライブラリ パス エラー) を考えると、私の例外が 10.5 (-lcrt1.10.5.o) であったことを除いて、Stefan の回答 (上記) はうまくいきました。
他の場所で、Gabor Cselle (reMail の作成者) による回答を見たことがありますが、彼はシンボリック リンクを使用してこの特定の問題を修正しました (ちなみに、誰かがこのページを参照しました)。