我正在使用脚本使用Xcode 4.3构建GraphViz当前版本(2012年6月7日)时发现库未找到错误。对于Xcode4.3的新位置以及Applications文件夹中的开发人员工具,从其他人的成功食谱中更新构建脚本时,我可能会犯错。ld: library not found for -lcrt1.10.6.o
(从内存中执行此操作,因此CRT库上的确切数字可能是错误的)
我也将如何将其合并到IDE中的Xcode构建中也感到有些困惑。我是一个非常有经验的程序员,但是有时无法找到绕过Xcode 4的方式。 (数十年来的Visual Studio等)。
我已经复制了this earlier question中的说明并进行了改编
#!/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
最佳答案
编译器通常使用crt1.o结合crt [i/n] .o和crt [begin/end] .o来支持构造函数和析构函数(在main和exit之前和之后调用的函数)。
此错误可能是由于缺少特定部署目标的库文件引起的。
首先,进行一些调查,例如:
ls -la /Developer/SDKs
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
如果可行,则可以将上述几行添加到 shell 配置文件(〜/.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
相关的
Error in xcode project: ld: library not found for -lcrt1.10.6.o
关于ios5 - 命令行库构建因链接器错误而失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10941247/