c++ - 如何解决 OSX cctools 中的构建错误?

标签 c++ macos makefile clang ld

我正尝试在 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/

相关文章:

swift - 有没有更快的方法在 MacOS Cocoa swift 应用程序中绘制 NSImage?

c++ - 多个目标的Makefile优化

c++ - 不会创建 Makefile

C++ : initialize input programmatically

c++ - boost interprocess file_lock不适用于多个进程

macos - 如何在 Mac 中使用 grpcurl?

swift - 在枚举期间获取完整文件路径

c - 使用makefile编译时如何设置GDB?

c++ - 使用 stringstream::imbue 和自定义全局运算符 new 调试断言失败

c++ - 将大括号包围的 block 放置在预期表达式的位置的 C++ 语法是什么?