2014-10-15 4 views
2

Так что я попытался установить лязг + CMake составить простую программу на C++, и я получаю следующее сообщение об ошибке:CMake «лязг ++ не может составить простую тестовую программу» (Fedora 20)

-- The C compiler identification is GNU 4.8.3 
-- The CXX compiler identification is Clang 3.5.0 
-- Check for working C compiler: /usr/bin/cc 
-- Check for working C compiler: /usr/bin/cc -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Check for working CXX compiler: /usr/local/bin/clang++ 
-- Check for working CXX compiler: /usr/local/bin/clang++ -- broken 
CMake Error at /usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:54 (message): 
    The C++ compiler "/usr/local/bin/clang++" is not able to compile a simple 
    test program. 

    It fails with the following output: 

    Change Dir: /home/jtcwang/tmp/CMake/CMake/CMakeFiles/CMakeTmp 



    Run Build Command:/usr/bin/gmake "cmTryCompileExec697180971/fast" 

    /usr/bin/gmake -f CMakeFiles/cmTryCompileExec697180971.dir/build.make 
    CMakeFiles/cmTryCompileExec697180971.dir/build 

    gmake[1]: Entering directory 
    `/home/jtcwang/tmp/CMake/CMake/CMakeFiles/CMakeTmp' 

    /usr/bin/cmake -E cmake_progress_report 
    /home/jtcwang/tmp/CMake/CMake/CMakeFiles/CMakeTmp/CMakeFiles 1 

    Building CXX object 
    CMakeFiles/cmTryCompileExec697180971.dir/testCXXCompiler.cxx.o 

    /usr/local/bin/clang++ -o 
    CMakeFiles/cmTryCompileExec697180971.dir/testCXXCompiler.cxx.o -c 
    /home/jtcwang/tmp/CMake/CMake/CMakeFiles/CMakeTmp/testCXXCompiler.cxx 

    Linking CXX executable cmTryCompileExec697180971 

    /usr/bin/cmake -E cmake_link_script 
    CMakeFiles/cmTryCompileExec697180971.dir/link.txt --verbose=1 

    /usr/local/bin/clang++ 
    CMakeFiles/cmTryCompileExec697180971.dir/testCXXCompiler.cxx.o -o 
    cmTryCompileExec697180971 -rdynamic 

    /usr/bin/ld: cannot find -lstdc++ 

    clang: error: linker command failed with exit code 1 (use -v to see 
    invocation) 

    gmake[1]: Leaving directory 
    `/home/jtcwang/tmp/CMake/CMake/CMakeFiles/CMakeTmp' 

    gmake[1]: *** [cmTryCompileExec697180971] Error 1 

    gmake: *** [cmTryCompileExec697180971/fast] Error 2 

Пришло даже не компилируя мою программу, потому что она не может скомпилировать тестовую программу.

Похоже, важная линия здесь:

/usr/bin/ld: cannot find -lstdc++ 

Однако, я проверил, что libstdc++ установлен и до настоящего времени, поэтому на данный момент я совершенно потерял.

Другие вещи, которые я пробовал:

  1. Использование прекомпилированное двоичных файлов вместо sudo yum install clang
  2. удалить и заново установить
  3. Пробовал clang++ hello.cpp (привет мир программа). Он говорит, что <iostreams> не найден. Является ли clang отсутствующей стандартной библиотекой? EDIT: переход на <iostream> дает мне такую ​​же ошибку компоновщика выше.

Я не знаком с сценой clang, cmake и C++ в целом, поэтому я был бы признателен за любые указатели. Благодаря!

+1

Нет ''. Используйте ''. – HolyBlackCat

+0

@ nos, я попробовал оба (дистрибутив и готовый двоичный файл), но ни один из них не работал. –

+0

@HolyBlackCat, круто, теперь я получаю '/ usr/bin/ld: не могу найти -lstdC++', который похож на ошибку компоновщика, когда я пытаюсь запустить cmake. Я пробовал 'clang ++ hello.cpp', какие другие флаги использовать? –

ответ

1

Вам нужны библиотеки для разработки и заголовки для библиотеки C++, попробуйте

yum install libstdc++-devel 
+0

Ошибка - ошибка компоновщика, заголовки были найдены, но компоновщик не смог найти двоичные файлы. –

+0

@ DavidRodríguez-dribeas Этот пакет также содержит файлы * .so, необходимые для связывания. – ismail

+0

.so должен быть там без пакетов devel, иначе вы не сможете запускать приложение на любом компьютере, на котором не установлены пакеты devel. Учитывая, что это основная библиотека C++, вы не могли запускать в основном любые программы, созданные с помощью C++ в вашем Linux-окне, если только каждая программа не статически связала стандартную библиотеку (это не так). –

-1

Вашего/дома/гну/bin/C++, кажется, требуют дополнительного флага, чтобы связать вещи правильно и CMake не знает об этом.

Чтобы использовать/usr/bin/C++, как ваш компилятор запускает cmake с -DCMAKE_CXX_COMPILER =/usr/bin/C++.

Кроме того, переменная CMAKE_PREFIX_PATH устанавливает целевой каталог, где должны быть установлены файлы проекта. Он не имеет ничего общего с префиксом установки CMake, и сам CMake уже это знает.

+0

Он уже использует 'clang ++' для компилятора. Это неверно. – WiSaGaN