线库生成失败,链接器错误
我正在使用脚本使用XCode 4.3获取库未发现构建GraphViz当前版本(2012年6月7日)的错误。 我可能犯了错误,从XCode4.3的新位置和Application文件夹中的开发人员工具的其他人的成功配方更新构建脚本。
ld: library not found for -lcrt1.10.6.o
(从内存中这样做,CRT库上的确切数字可能是错误的)
我也有点迷茫,我将如何将其纳入到IDE中的XCode构建中。 我是一位非常有经验的程序员,但有时候无法找到XCode 4的方式。 (几十年的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
编译器通常使用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。
解决方案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 ", 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项目中出现错误:找不到-lcrt1.10.6.o的ld:library
如果我没有记错,这是什么修复了图书馆未发现的问题。
CFLAGS="$(OTHER_CFLAGS) -miphoneos-version-min=5.0"
LDFLAGS="$(OTHER_LDFLAGS) --miphoneos-version-min=5.0"
要将其链接到Xcode,请在“生成设置”下单击“标题和库”搜索路径,然后将路径添加到库和页眉的内置版本中。
您可以将构建脚本添加为Xcode项目的一部分,但是我没有取得成功,此外,您应该只需要在每个版本中构建一次,因此将时间放到构建脚本以外的任何地方都没有很多回报。
如果您决定将脚本放在项目中(祝您好运!),然后转到构建阶段选项卡,添加类型为“运行脚本”的构建阶段并将脚本粘贴到那里。
链接地址: http://www.djcxy.com/p/52441.html上一篇: line library build fails with linker error
下一篇: Prevent Java Swing JTable losing focus when invalid data entered