0

我目前正在尝试编译一个程序,包括#include <clang-c/Index.h>使用 cmake

cmake_minimum_required(VERSION 3.4.3)
project(ast-dump)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
find_package(LLVM REQUIRED CONFIG)
find_package(Clang REQUIRED)

include_directories(${LLVM_INCLUDE_DIRS})
add_definitions(${LLVM_DEFINITIONS})
include_directories(${CLANG_INCLUDE_DIRS})
add_definitions(${CLANG_DEFINITIONS})

add_executable(ast-dump ast-dump.cpp)

llvm_map_components_to_libnames(llvm_libs all)

target_link_libraries(ast-dump ${llvm_libs})

set_target_properties(ast-dump PROPERTIES
    CXX_STANDARD 14
)

我收到以下错误:

Undefined symbols for architecture x86_64:
  "_clang_Cursor_isNull", referenced from:
      visit(CXCursor, CXCursor, void*) in ast-dump.cpp.o
  "_clang_Location_isInSystemHeader", referenced from:
      visit(CXCursor, CXCursor, void*) in ast-dump.cpp.o
  "_clang_createIndex", referenced from:
      _main in ast-dump.cpp.o
  "_clang_disposeIndex", referenced from:
      _main in ast-dump.cpp.o
  "_clang_disposeString", referenced from:
      toString(CXString) in ast-dump.cpp.o
  "_clang_disposeTranslationUnit", referenced from:
      _main in ast-dump.cpp.o
  "_clang_equalCursors", referenced from:
      visit(CXCursor, CXCursor, void*) in ast-dump.cpp.o
  "_clang_getCString", referenced from:
      toString(CXString) in ast-dump.cpp.o
  "_clang_getCursorDefinition", referenced from:
      visit(CXCursor, CXCursor, void*) in ast-dump.cpp.o
  "_clang_getCursorExtent", referenced from:
      visit(CXCursor, CXCursor, void*) in ast-dump.cpp.o
  "_clang_getCursorKind", referenced from:
      visit(CXCursor, CXCursor, void*) in ast-dump.cpp.o
      traverse(CXTranslationUnitImpl*) in ast-dump.cpp.o
  "_clang_getCursorLocation", referenced from:
      visit(CXCursor, CXCursor, void*) in ast-dump.cpp.o
  "_clang_getCursorSpelling", referenced from:
      visit(CXCursor, CXCursor, void*) in ast-dump.cpp.o
  "_clang_getCursorType", referenced from:
      visit(CXCursor, CXCursor, void*) in ast-dump.cpp.o
  "_clang_getRangeEnd", referenced from:
      visit(CXCursor, CXCursor, void*) in ast-dump.cpp.o
  "_clang_getRangeStart", referenced from:
      visit(CXCursor, CXCursor, void*) in ast-dump.cpp.o
  "_clang_getSpellingLocation", referenced from:
      toLineColumn(CXSourceLocation) in ast-dump.cpp.o
  "_clang_getTokenSpelling", referenced from:
      visit(CXCursor, CXCursor, void*) in ast-dump.cpp.o
  "_clang_getTranslationUnitCursor", referenced from:
      traverse(CXTranslationUnitImpl*) in ast-dump.cpp.o
  "_clang_getTypeSpelling", referenced from:
      visit(CXCursor, CXCursor, void*) in ast-dump.cpp.o
  "_clang_parseTranslationUnit", referenced from:
      _main in ast-dump.cpp.o
  "_clang_tokenize", referenced from:
      visit(CXCursor, CXCursor, void*) in ast-dump.cpp.o
  "_clang_visitChildren", referenced from:
      visit(CXCursor, CXCursor, void*) in ast-dump.cpp.o
      traverse(CXTranslationUnitImpl*) in ast-dump.cpp.o

但是,当我尝试使用以下命令行进行编译时,它工作正常:

c++ -isystem /usr/local/opt/llvm/include -L/usr/local/opt/llvm/lib/ -std=c++14 ast-dump.cpp -lclang -o ast-dump

但是使用命令行,如果我尝试添加#include <cmath>,就会出现ast-dump.cppcatalina<cmath>错误,我不知道如何解决。

任何帮助不胜感激!提前非常感谢。

4

0 回答 0