ReactiveX / RxCpp

Reactive Extensions for C++
Apache License 2.0
3.03k stars 390 forks source link

cmake fails to generate makefiles #478

Closed iam closed 5 years ago

iam commented 5 years ago

Running this command on some Ubuntu systems:

cmake -G"Unix Makefiles" -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=RelWithDebInfo -B. ../CMake

(from README.md "Linux --- Clang" instructions)

Gives the following error message:

    "/usr/bin/clang++"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: /mnt/ssd3/workspace/github/iam/rxcpp/projects/build/CMakeFiles/CMakeTmp

    Run Build Command:"/usr/bin/make" "cmTC_861e7/fast"
    /usr/bin/make -f CMakeFiles/cmTC_861e7.dir/build.make CMakeFiles/cmTC_861e7.dir/build
    make[1]: Entering directory '/mnt/ssd3/workspace/github/iam/rxcpp/projects/build/CMakeFiles/CMakeTmp'
    Building CXX object CMakeFiles/cmTC_861e7.dir/testCXXCompiler.cxx.o
    /usr/bin/clang++     -o CMakeFiles/cmTC_861e7.dir/testCXXCompiler.cxx.o -c /mnt/ssd3/workspace/github/iam/rxcpp/projects/build/CMakeFiles/CMakeTmp/testCXXCompiler.cxx
    Linking CXX executable cmTC_861e7
    /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_861e7.dir/link.txt --verbose=1
    /usr/bin/clang++       -rdynamic CMakeFiles/cmTC_861e7.dir/testCXXCompiler.cxx.o  -o cmTC_861e7 
    /usr/bin/ld: cannot find -lstdc++
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    CMakeFiles/cmTC_861e7.dir/build.make:97: recipe for target 'cmTC_861e7' failed
    make[1]: *** [cmTC_861e7] Error 1
    make[1]: Leaving directory '/mnt/ssd3/workspace/github/iam/rxcpp/projects/build/CMakeFiles/CMakeTmp'
    Makefile:126: recipe for target 'cmTC_861e7/fast' failed
    make: *** [cmTC_861e7/fast] Error 2

The fix appears to be to append -DCMAKE_EXE_LINKER_FLAGS="-stdlib=libc++" to the above cmake command line.

Interestingly enough, projects/CMake/shared.cmake already adds that flag, but it seems that the file is included too late for the test cmake program to succeed.