Snow Leopardにアップグレードし、Xcode 3.2をインストールしてから、SL用のiPhone SDK 3をインストールしました。
プロジェクトでは、ビルド時に次のエラーが発生します。
ld
:-lcrt1.10.6.o
のライブラリが見つかりません
私はネットを検索しましたが、役に立つものは何も見つかりません。
プロジェクト設定の編集->ビルドタブで-> Mac OS X Deployment Targetの場合、XCode 3で10.5(10.6であっても10.6ではない)に変更し、それが役立つかどうかを確認します。
XCode 4の場合、10.6に設定する必要があります
追伸リリースまたはデバッグだけでなく、すべてのターゲットに設定してください。 (そうしなかった場合、1つは失敗し、もう1つは失敗しません)
以下を〜/ .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
上記の例でわかるように、MacOSX10.5ではcrt1.10.6.o
がありません。
これを解決するには、他の環境を指す欠落ファイルへのリンクを作成するか、展開ターゲットを変更します。例えば。
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
これで、コンパイラは必要なライブラリを見つけます!
あるマシンでXcode 4を使用し、別のマシンでXcode 3.2.6を使用していたときに、この問題が発生しました。 2つのバージョンは.xcodeprojファイルをそれらの間で交換できるはずですが、project.pbxprojファイル(.xcodeprojディレクトリ内)には、次の場所がまだあることがわかりました。
MACOSX_DEPLOYMENT_TARGET = 10.6;
Xcodeを終了し、3つのオカレンスを次のように変更しました。
MACOSX_DEPLOYMENT_TARGET = 10.5;
プロジェクトを再開した後、再びビルドできました。ふう!
これで数時間を無駄にした...
興味深いことに、私にとって問題はシミュレーターデバッグのみでした。 Simulator-ReleaseやDevice Debug/Releaseに不満はありませんでした!
とにかく、展開ターゲットを10.5に変更すると、これが解決しました!!
同じエラーメッセージが表示されましたが、上記の解決策はどれも役に立ちませんでした。 xcodeprojファイル内の* .pbxuserおよび* .mode1v3ファイルを削除することで解決しました。
この問題は、Mac OS X 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の著者)の回答を見ましたが、シンボリックリンクを使用してこの特定の問題を修正しました(ちなみに、誰かがこのページを参照しました)。