架构x86_64的未定义符号:“std :: terminate()”,构建万花筒llvm时

时间:2015-07-01 04:20:49

标签: llvm llvm-clang

我正在做万花筒教程。我在第二步。

https://github.com/westymatt/creole

但是在使用clang ++构建

时出现此错误
clang++ -Wno-c++11-extensions -g -std=c++11  -I/usr/local/Cellar/llvm/3.6.1/include    -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS src/lexer.cc src/parser.cc -L/usr/local/Cellar/llvm/3.6.1/lib/ -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMCodeGen -lLLVMScalarOpts -lLLVMProfileData -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMTarget -lLLVMX86Desc -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMMC -lLLVMX86Utils -lLLVMCore -lLLVMSupport -lc++ -O0 -o creole
Undefined symbols for architecture x86_64:
  "std::terminate()", referenced from:
      ___clang_call_terminate in lexer-608bbc.o
      ___clang_call_terminate in parser-09b617.o
ld: symbol(s) not found for architecture x86_64

3 个答案:

答案 0 :(得分:0)

std :: terminate位于OSX上的libc ++中(由于路径中的“Cellar”,我假设你正在使用它)。您似乎明确地链接到libc ++,这意味着您的链接线上的排序可能会出错。

我无法使用树顶部的实际教程来源复制它(我没有签出3.6.1),但我建议您按照示例Makefiles进行操作。本教程的给定部分的链接行如下所示:

  

clang ++ -Wl,-dead_strip -rdynamic -Wl,-rpath -Wl,@ executable_path /../ lib -L ​​/ Users / echristo / builds / build-llvm / Debug + Asserts / lib -L ​​/ Users / echristo / builds / build-llvm / Debug + Asserts / lib -m64 -o / Users / echristo / builds / build-llvm / Debug + Asserts / examples / Kaleidoscope-Ch4 / Users / echristo / builds / build-llvm / examples / Kaleidoscope / Chapter4/Debug+Asserts/toy.o \           -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMCodeGen -lLLVMScalarOpts -lLLVMProfileData -lLLVMInstCombine -lLLVMInstrumentation -lLLVMTransformUtils -lLLVMipa -lLLVMX86Desc -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMMCJIT -lLLVMExecutionEngine -lLLVMTarget -lLLVMAnalysis -lLLVMRuntimeDyld -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMMC -lLLVMCore -lLLVMSupport -lz -lpthread -ledit -lcurses -lm

可以让你了解它的外观。

通过查看github上的源代码,看起来你已经去了“在命令行中包含llvm-config的输出”,由于组件可能会发生变化,因此不太可靠等等。

clang++ -g -O3 toy.cpp `llvm-config --cxxflags --ldflags --system-libs --libs core` -o toy
教程中的

应足以编译您的简单示例。只需将toy.cpp替换为两个示例文件,因为您将其拆分了。

答案 1 :(得分:0)

我收到此错误,而我将我的代码与使用ARC构建的静态库链接,但是有一些扩展名为.mm的Objective C文件。当我用.m重命名它们时,工作正常。

答案 2 :(得分:-1)

According to this 您需要确保您的函数实现都具有相应的声明。