Запуск программы с использованием Clang + CMake + Visual Studio создает неопределенные ссылки - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь собрать / запустить простую тестовую программу с использованием LLVM / Clang, Visual Studio и CMake, но каждый раз, когда я пытаюсь построить проект, я получаю тысячи ошибок, говорящих: undefined reference ... или ... is ambiguous.

Если я собираю библиотеку, которая содержит все LLVM и Clang, ошибок нет, но когда я строю программу, которая включает в себя мою библиотеку, я получаю тысячи ошибок в LLVM заголовках,Это заставляет меня поверить, что я пропускаю шаг с LLVM в моем исполняемом файле.Возможно, я должен был связывать библиотеки llvm / clang при сборке моего исполняемого файла.

В моей библиотеке у меня просто есть набор включений llvm / clang (без другого кода), а в исполняемом файле у меня пустая основнаяс одним включением в мою библиотеку.

Командная строка программы

[1/1] cmd.exe /C "cd . && C:\msys64\mingw64\bin\clang++.exe -g   rustynail/apps/introspection/CMakeFiles/RN_Introspection.dir/main.cpp.obj  -o D:\GameDevelopment\Projects\RustyNail_CMake\dev\rno\bin\RN_Introspection.exe -Wl,--out-implib,D:\GameDevelopment\Projects\RustyNail_CMake\dev\rno\lib\libRN_Introspection.dll.a -Wl,--major-image-version,0,--minor-image-version,0 -LD:/GameDevelopment/Projects/RustyNail_CMake/dev/rno/custom/shared D:/GameDevelopment/Projects/RustyNail_CMake/dev/rno/lib/UT.lib D:/GameDevelopment/Projects/RustyNail_CMake/dev/rno/lib/RTTI.lib -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
FAILED: D:/GameDevelopment/Projects/RustyNail_CMake/dev/rno/bin/RN_Introspection.exe 
cmd.exe /C "cd . && C:\msys64\mingw64\bin\clang++.exe -g   
rustynail/apps/introspection/CMakeFiles/RN_Introspection.dir/main.cpp.obj  -o D:\GameDevelopment\Projects\RustyNail_CMake\dev\rno\bin\RN_Introspection.exe -Wl,--out-implib,D:\GameDevelopment\Projects\RustyNail_CMake\dev\rno\lib\libRN_Introspection.dll.a -Wl,--major-image-version,0,--minor-image-version,0 -LD:/GameDevelopment/Projects/RustyNail_CMake/dev/rno/custom/shared D:/GameDevelopment/Projects/RustyNail_CMake/dev/rno/lib/UT.lib D:/GameDevelopment/Projects/RustyNail_CMake/dev/rno/lib/RTTI.lib -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
rustynail/apps/introspection/CMakeFiles/RN_Introspection.dir/main.cpp.obj: In function `clang::Decl::getAccess() const':
C:\msys64\mingw64\include\clang/AST/DeclBase.h:452: undefined reference to `clang::Decl::AccessDeclContextSanity() const'

<More similar errors but omitted for brevity>

Программа CMakeLists.txt

project(RN_Introspection)

set(sources
 main.cpp
)

rn_exec(SRCS ${sources})

find_package(RTTI REQUIRED)

target_link_libraries(${PROJECT_NAME}
    PUBLIC
        RustyNail::RTTI
   )

   target_include_directories(${PROJECT_NAME}
    PUBLIC
        ${RTTI_INCLUDE_DIRS}
    )

CMakeSettings.json

{
"configurations": [
{
  "environments": [
    {
      "MINGW64_ROOT": "C:\\msys64\\mingw64",
      "BIN_ROOT": "${env.MINGW64_ROOT}\\bin",
      "FLAVOR": "x86_64-w64-mingw32",
      "TOOLSET_VERSION": "7.3.0",
      "PATH": "${env.MINGW64_ROOT}\\bin;${env.MINGW64_ROOT}\\..\\usr\\local\\bin;${env.MINGW64_ROOT}\\..\\usr\\bin;${env.MINGW64_ROOT}\\..\\bin;${env.PATH}",
      "INCLUDE": "${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION};${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION}\\tr1;${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION}\\${env.FLAVOR};${env.MINGW64_ROOT}\\include",
      "environment": "mingw_64"
    }
  ],
  "name": "Mingw64-Debug",
  "generator": "Ninja",
  "configurationType": "Debug",
  "inheritEnvironments": [
    "mingw_64"
  ],
  "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
  "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
  "cmakeCommandArgs": "",
  "buildCommandArgs": "-v",
  "ctestCommandArgs": "",
  "intelliSenseMode": "linux-gcc-x64",
  "variables": [
    {
      "name": "CMAKE_C_COMPILER",
      "value": "${env.BIN_ROOT}\\clang.exe"
    },
    {
      "name": "CMAKE_CXX_COMPILER",
      "value": "${env.BIN_ROOT}\\clang++.exe"
    }
  ]
}
]
}
...