Компиляция swift-lldb завершается с ошибкой c ++ 11 - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь скомпилировать swift-lldb на Ubuntu 14.04 (следуя инструкциям из https://github.com/apple/swift-lldb). У меня установлены следующие зависимости:

  1. Clang-3.5
  2. Cmake version 3.5.2
  3. Python version 2.7.6

При выполнении шага сценария сборки, который является lldb/scripts/build-swift-cmake.py --test, я вижу следующую ошибку:

CMake Warning at cmake/modules/HandleLLVMOptions.cmake:185 (message):
  -fPIC is not supported.
Call Stack (most recent call first):
  cmake/modules/HandleLLVMOptions.cmake:216 (add_flag_or_print_warning)
  CMakeLists.txt:616 (include)


CMake Error at cmake/modules/HandleLLVMOptions.cmake:429 (message):
  LLVM requires C++11 support but the '-std=c++11' flag isn't supported.
Call Stack (most recent call first):
  CMakeLists.txt:616 (include)

Iопределили переменные окружения CC и CXX для указания на компиляторы clang C и C ++.

root:/myswift# echo $CC
/usr/bin/clang
root:/myswift# echo $CXX
/usr/bin/clang++

В документации clang я также обнаружил, что c++11 поддерживается clang-3.5. Не уверен, что мне здесь не хватает. Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 19 декабря 2018

clang-4.0, упомянутый как часть установки, должен поддерживать флаг -std=c++11 (только что протестированный clang-4.0.1).Тем не менее, обновление до clang-6.0, похоже, решает эту ошибку процесса сборки.

Запуск cmake непосредственно в автоматически создаваемом каталоге сборки (с помощью сценариев сборки swift) может использоваться для более подробного изучения сбоя сборки.,Чтобы указать здесь компиляторы, вместо установки переменных среды CC и CXX (что хорошо работает для скриптов настройки GNU), для компиляторов можно установить значение cmake через

cmake -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ path_to_src_or_build_directory

Существующий CMakeCache.txtвозможно, придется удалить, чтобы вышеупомянутые параметры были соблюдены.

Проблема с clang++ установками, которые я наблюдал, заключается в том, что clang++ не может найти C++ headers (то есть, если заголовки C++ находятся внестандартные локации, отличные от /usr/include, хотя вряд ли в случае с Ubuntu).Если /usr/bin/clang++ не может скомпилировать простую программу, такую ​​как

#include <iostream>
using namespace std;
int main() {
    cout << "hello" << endl;
    return 0;
}

, которая не может найти включаемый файл iostream, это может помочь установить --gcc-toolchain=/pathtoaworkinggcc, где pathtoaworkinggcc должно включать include, lib, bin и т. Д. Работающего компилятора C++ (возможно, g++ в случае установки Ubuntu).

...