5

スクリプトを使用してXcode4.3でGraphVizの現在のリリース(2012年6月7日)をビルドすると、ライブラリが見つからないというエラーが発生します。Xcode4.3の新しい場所とアプリケーションフォルダ内の開発者ツールについて、他の人が成功したレシピからビルドスクリプトを更新するのを間違えた可能性があります。

ld: library not found for -lcrt1.10.6.o

(これをメモリから実行するため、CRTライブラリの正確な数が間違っている可能性があります)

また、これをIDEのXcodeビルドにどのように組み込むかについても少し迷っています。私は非常に経験豊富なプログラマーですが、Xcode4を回避する方法を見つけるのに苦労することがあります。(数十年のVisual Studio他)。

私はこの以前の質問からの指示をコピーし、適応させました

#!/bin/sh
# For iPhoneOS, see http://clang.llvm.org/ for options
export DEV_iOS=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
# was /Developer/Platforms/iPhoneOS.platform/Developer
export SDK_iOS=${DEV_iOS}/SDKs/iPhoneOS5.1.sdk
export COMPILER_iOS=${DEV_iOS}/usr/bin
export CC=${COMPILER_iOS}/clang
export CXX=${COMPILER_iOS}/clang++
export LDFLAGS="-arch armv7 -pipe -Os -gdwarf-2 -mthumb -isysroot ${SDK_iOS}"
export CFLAGS="${LDFLAGS}"
export OBJCFLAGS="${LDFLAGS}"
export CXXFLAGS="${LDFLAGS} -fvisibility-inlines-hidden"
export LD=${COMPILER_iOS}/ld
export CPP=${COMPILER_iOS}/clang
export AR=${COMPILER_iOS}/ar
export AS=${COMPILER_iOS}/as
export NM=${COMPILER_iOS}/nm
export CXXCPP="${COMPILER_iOS}/clang++"
export OBJC=${COMPILER_iOS}/clang
export RANLIB=${COMPILER_iOS}/ranlib

./configure \
--build=arm-apple-darwin11 \
--host=arm-apple-darwin11 \
--disable-dependency-tracking \
--enable-shared=no \
--enable-static=yes \
--enable-ltdl=no \
--enable-swig=no \
--enable-tcl=no \
--srcdir=${GVROOT} \
--with-codegens=no \
--with-cgraph=no \
--with-graph=yes \
--with-expat=no \
--with-fontconfig=no \
--with-freetype2=no \
--with-ipsepcola=yes \
--with-libgd=no \
--with-quartz=yes \
--with-visio=yes \
--with-x=no
4

2 に答える 2

1

コンパイラは通常、crt1.o を crt[i/n].o および crt[begin/end].o と組み合わせて使用​​して、コンストラクタとデストラクタ (main と exit の前後に呼び出される関数) をサポートします。

このエラーは、特定の展開ターゲットのライブラリ ファイルが見つからないことが原因である可能性があります。

まず、次のような調査を行います。

  1. すべての展開ターゲットをリストします。

    ls -la /Developer/SDKs

  2. どの環境にどの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 がありません。

解決策 1:

他の環境を指す欠落ファイルへのリンクを作成することで解決できます。または、展開ターゲットを変更することもできます。例えば

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

解決策 2

したがって、make を使用してコンパイルする場合、実際には CC 変数によって適切なコンパイラを指定できます。例えば

CC=/path/to/gcc-3.4 make

解決策 3

また、次の行を実行して、gcc の適切なターゲット展開環境変数を指定することもできます。

export MACOSX_DEPLOYMENT_TARGET=10.5
export C_INCLUDE_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/include
export LIBRARY_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/lib

これが機能する場合は、上記の行をシェル プロファイル (~/.profile) に追加して、変更を永続的にすることができます。


テスト方法

conftest.c次のコードを使用してサンプル ファイルを作成します。

#ifdef __GNUC__
  yes;
#endif

そして、次の方法でコンパイルしてみてください:

gcc conftest.c
cc conftest.c
cc conftest.cc conftest.c

トラブルシューティング

欠落しているファイルを正確に確認するには、dtruss を使用してデバッグしてみてください。

sudo dtruss -f gcc conftest.c 2>/dev/stdout | grep crt

次のように表示されます。

12426/0xb4e3b:  stat64("/Developer/usr/lib/gcc/i686-apple-darwin10/4.2.1/crt1.10.6.o\0", 0x7FFF5FBFE780, 0xB)        = -1 Err#2

したがって、欠落しているファイルを見つけたら、既存の場所 (例: locate crt1.10.6.o) から欠落しているファイルをリンクすることにより、最初の解決策に従うことができます。他に不足しているシンボルがある場合は、別のファイルを試してください (前にアーキテクチャを確認してください: file `locate crt1.10.6.o`)。

例えば

sudo ln -s /Applications/Xcode.app/Contents/Developer//Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/lib/crt1.10.6.o /Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/crt1.10.6.o
sudo ln -s /Applications/Xcode.app/Contents/Developer//Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/lib/crt1.10.6.o /Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/x86_64/crt1.10.6.o

関連している

xcode プロジェクトのエラー: ld: -lcrt1.10.6.o のライブラリが見つかりません

于 2013-04-19T10:41:29.457 に答える
0

私の記憶が正しければ、これがライブラリが見つからない問題を修正したものです。

CFLAGS="$(OTHER_CFLAGS) -miphoneos-version-min=5.0"
LDFLAGS="$(OTHER_LDFLAGS) --miphoneos-version-min=5.0"

これを Xcode にリンクするには、[ビルド設定]、[ヘッダーとライブラリの検索パス] の下で、ビルドされたバージョンのライブラリとヘッダーへのパスを追加する必要があります。

ビルド スクリプトを Xcode プロジェクトの一部として追加できますが、私はこれで成功していません。また、バージョンごとに 1 回だけビルドする必要があるため、ビルド スクリプト以外に時間を割くことはありません。多くのリターン。

とにかくスクリプトをプロジェクトに入れることにした場合 (頑張ってください!)、[ビルド フェーズ] タブに移動し、「スクリプトの実行」タイプのビルド フェーズを追加して、そこにスクリプトを貼り付けます。

于 2012-06-08T02:23:31.627 に答える