5

我在使用脚本使用 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 等人)。

我已经复制了这个早先问题的说明并进行了改编

#!/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

如果这可行,那么您可以将以上行添加到您的 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

有关的

xcode项目中的错误:ld:找不到-lcrt1.10.6.o的库

于 2013-04-19T10:41:29.457 回答
0

If I remember correctly this is what fixed the library not found problem.

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

To link this to Xcode, under Build Settings then Header and Library search paths you need to add the paths to the built versions of the library and the header.

You can add the build script as part of your Xcode project, but I haven't had success with this, plus you should only need to build it once per version, so putting the time into anything other than a build script doesn't have much return.

If you decide to put the script in your project anyway (good luck!), then go to the build phases tab, add a build phase of type "Run Script" and paste your script there.

于 2012-06-08T02:23:31.627 回答