Compilation with LLVM fails on Linux Rocky9/Ubuntu-22.04 - stdlib incorrectly chosen
Opened this issue · 0 comments
In CMakeLists.txt, check_cxx_compiler_flag(-stdlib=libc++ HAVE_LIBCPP)
is used to determine whether to use LLVM's C++ stdlib - libc++, or the system's own GNU one (libstdc++).
Unfortunately, those distros do not ship with that library (per the clip below) - and yet the test succeeds - yielding failure later in the build process due to lots of missing header files.
[rocky@ip-10-11-36-33 ~]$ cat >test.cpp
#include <iostream>
int main() {
std::cout << "Helloworld";
}
[rocky@ip-10-11-36-33 ~]$ clang++ -stdlib=libc++ test.cpp
test.cpp:1:10: fatal error: 'iostream' file not found
1 | #include <iostream>
| ^~~~~~~~~~
1 error generated.
The cause is that CMake's check_cxx_compiler_flag(-stdlib=libc++ HAVE_LIBCPP)
test which is used in Salmon only tests if the compiler accepts the flag (the test code it uses doesn't have any includes - just main() {return 0;}
) rather than if it works.
I don't know the whys behind the missing library - the library is available on OS/X for example - however it seems this behaviour should be changed for now on Linux platforms.