我正尝试在 OSX 下从 CCtools 集合中为 OSX 构建工具。我这样做是为了研究目的。
当我为整个项目运行 makefile 时,出现链接器错误:
=========== /Applications/Xcode.app/Contents/Developer/usr/bin/make all for misc =============
cc -Os -DLTO_SUPPORT -DTRIE_SUPPORT -g -Wall -I. -I./../include -I. -I/usr/local/include -c -o ./lipo.o lipo.c
cc -nostdlib -r \
-o ./lipo.private.o \
./lipo.o -L./../libstuff -lstuff
cc -o ./lipo.NEW \
./lipo.private.o
Undefined symbols for architecture x86_64:
"_is_llvm_bitcode_from_memory", referenced from:
_main in lipo.private.o
_check_archive in lipo.private.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [lipo.NEW] Error 1
make: *** [all] Error 1
运行各个工具的 make 文件使我遇到类似的链接器错误。我尝试过的所有版本的 CCtools 都会出现这种情况(包括 877.5,最新源代码和 862,我安装的工具所在的版本。)
- 编译工具时我缺少什么?
- 我怎样才能哄链接器让我知道我缺少什么库?
- 在哪里可以找到编译工具的说明?
附加信息:
- 我安装了 XCode 和开发人员工具,并且一直在构建项目。
- 我还从 brew 安装了 gcc。
我一定是遗漏了一些愚蠢的东西。
最佳答案
我无法为您的 877.5 版本提供确切的解决方案,但总体问题是编译需要您机器上的一些 LLVM 代码。它可能就像缺少 LLVM header 的包含目录一样简单,或者可能需要链接一些 LLVM 库。在您的情况下,它们似乎以某种方式与 LLVM Bitcode 有关。
就我而言,我刚刚构建了更新版本 cctools-895 的一个子集。它提示缺少与 LLVM 的 llvm-c/lto.h
header 相关的符号。当我将以下内容添加到有问题的文件的编译规则中时,错误消失了:
-I/opt/llvm-7.0.0/include/
LLVM 7 的版本是我随机猜测的,因为我的机器上有它。您可能希望调整包含路径以指向应该用于构建 cctools 的正确版本的 LLVM。
在您的机器上获取 LLVM 的最简单方法是从 LLVM Download 获取二进制版本页面。
关于c++ - 如何解决 OSX cctools 中的构建错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34803202/