grommile Posted July 17, 2019 Eternity currently seems to not build on Debian 10 (buster - the current, and very recently released, stable). Everything compiles, but it blows up at link time: [ 20%] Linking CXX executable eternity /usr/bin/ld: CMakeFiles/eternity.dir/d_files.cpp.o: in function `D_CheckBasePath(qstring const&)': d_files.cpp:(.text+0x12de): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator*() const' /usr/bin/ld: d_files.cpp:(.text+0x141e): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator++()' /usr/bin/ld: CMakeFiles/eternity.dir/d_files.cpp.o: in function `D_CheckUserPath(qstring const&)': d_files.cpp:(.text+0x1a8a): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator*() const' /usr/bin/ld: d_files.cpp:(.text+0x1baa): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator++()' /usr/bin/ld: CMakeFiles/eternity.dir/d_files.cpp.o: in function `D_GameAutoloadWads()': d_files.cpp:(.text+0x280b): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator*() const' /usr/bin/ld: d_files.cpp:(.text+0x2955): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator++()' /usr/bin/ld: CMakeFiles/eternity.dir/d_files.cpp.o: in function `D_GameAutoloadDEH()': d_files.cpp:(.text+0x2b17): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator*() const' /usr/bin/ld: d_files.cpp:(.text+0x2cd1): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator++()' /usr/bin/ld: CMakeFiles/eternity.dir/d_files.cpp.o: in function `D_GameAutoloadCSC()': d_files.cpp:(.text+0x2ec9): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator*() const' /usr/bin/ld: d_files.cpp:(.text+0x2ffe): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator++()' /usr/bin/ld: CMakeFiles/eternity.dir/d_files.cpp.o: in function `std::filesystem::__cxx11::path::path(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::filesystem::__cxx11::path::format)': d_files.cpp:(.text._ZNSt10filesystem7__cxx114pathC2EONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS1_6formatE[_ZNSt10filesystem7__cxx114pathC5EONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS1_6formatE]+0x4f): undefined reference to `std::filesystem::__cxx11::path::_M_split_cmpts()' /usr/bin/ld: CMakeFiles/eternity.dir/d_files.cpp.o: in function `std::filesystem::__cxx11::path::clear()': d_files.cpp:(.text._ZNSt10filesystem7__cxx114path5clearEv[_ZNSt10filesystem7__cxx114path5clearEv]+0x20): undefined reference to `std::filesystem::__cxx11::path::_M_split_cmpts()' /usr/bin/ld: CMakeFiles/eternity.dir/d_files.cpp.o: in function `std::filesystem::__cxx11::operator==(std::filesystem::__cxx11::path const&, std::filesystem::__cxx11::path const&)': d_files.cpp:(.text._ZNSt10filesystem7__cxx11eqERKNS0_4pathES3_[_ZNSt10filesystem7__cxx11eqERKNS0_4pathES3_]+0x1f): undefined reference to `std::filesystem::__cxx11::path::compare(std::filesystem::__cxx11::path const&) const' /usr/bin/ld: CMakeFiles/eternity.dir/d_files.cpp.o: in function `std::filesystem::__cxx11::path::extension() const': d_files.cpp:(.text._ZNKSt10filesystem7__cxx114path9extensionEv[_ZNKSt10filesystem7__cxx114path9extensionEv]+0x19): undefined reference to `std::filesystem::__cxx11::path::_M_find_extension() const' /usr/bin/ld: CMakeFiles/eternity.dir/d_files.cpp.o: in function `std::filesystem::__cxx11::directory_entry::status() const': d_files.cpp:(.text._ZNKSt10filesystem7__cxx1115directory_entry6statusEv[_ZNKSt10filesystem7__cxx1115directory_entry6statusEv]+0x14): undefined reference to `std::filesystem::status(std::filesystem::__cxx11::path const&)' /usr/bin/ld: CMakeFiles/eternity.dir/d_files.cpp.o: in function `std::filesystem::__cxx11::directory_entry::symlink_status() const': d_files.cpp:(.text._ZNKSt10filesystem7__cxx1115directory_entry14symlink_statusEv[_ZNKSt10filesystem7__cxx1115directory_entry14symlink_statusEv]+0x14): undefined reference to `std::filesystem::symlink_status(std::filesystem::__cxx11::path const&)' /usr/bin/ld: CMakeFiles/eternity.dir/d_files.cpp.o: in function `std::filesystem::__cxx11::directory_iterator::directory_iterator(std::filesystem::__cxx11::path const&)': d_files.cpp:(.text._ZNSt10filesystem7__cxx1118directory_iteratorC2ERKNS0_4pathE[_ZNSt10filesystem7__cxx1118directory_iteratorC5ERKNS0_4pathE]+0x26): undefined reference to `std::filesystem::__cxx11::directory_iterator::directory_iterator(std::filesystem::__cxx11::path const&, std::filesystem::directory_options, std::error_code*)' /usr/bin/ld: CMakeFiles/eternity.dir/d_files.cpp.o: in function `std::filesystem::__cxx11::path::path<char const*, std::filesystem::__cxx11::path>(char const* const&, std::filesystem::__cxx11::path::format)': d_files.cpp:(.text._ZNSt10filesystem7__cxx114pathC2IPKcS1_EERKT_NS1_6formatE[_ZNSt10filesystem7__cxx114pathC5IPKcS1_EERKT_NS1_6formatE]+0x64): undefined reference to `std::filesystem::__cxx11::path::_M_split_cmpts()' /usr/bin/ld: CMakeFiles/eternity.dir/d_files.cpp.o: in function `std::filesystem::__cxx11::path::path<char [5], std::filesystem::__cxx11::path>(char const (&) [5], std::filesystem::__cxx11::path::format)': d_files.cpp:(.text._ZNSt10filesystem7__cxx114pathC2IA5_cS1_EERKT_NS1_6formatE[_ZNSt10filesystem7__cxx114pathC5IA5_cS1_EERKT_NS1_6formatE]+0x5e): undefined reference to `std::filesystem::__cxx11::path::_M_split_cmpts()' /usr/bin/ld: CMakeFiles/eternity.dir/d_findiwads.cpp.o: in function `D_addSubDirectories(Collection<qstring>&, char const*)': d_findiwads.cpp:(.text+0x272): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator*() const' /usr/bin/ld: d_findiwads.cpp:(.text+0x3cf): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator++()' /usr/bin/ld: CMakeFiles/eternity.dir/d_findiwads.cpp.o: in function `D_checkPathForIWADs(qstring const&)': d_findiwads.cpp:(.text+0xcca): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator*() const' /usr/bin/ld: d_findiwads.cpp:(.text+0xe7d): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator++()' /usr/bin/ld: CMakeFiles/eternity.dir/d_findiwads.cpp.o: in function `D_checkForNoRest()': d_findiwads.cpp:(.text+0x11b1): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator*() const' /usr/bin/ld: d_findiwads.cpp:(.text+0x130e): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator++()' /usr/bin/ld: CMakeFiles/eternity.dir/d_findiwads.cpp.o: in function `std::filesystem::is_directory(std::filesystem::__cxx11::path const&, std::error_code&)': d_findiwads.cpp:(.text._ZNSt10filesystem12is_directoryERKNS_7__cxx114pathERSt10error_code[_ZNSt10filesystem12is_directoryERKNS_7__cxx114pathERSt10error_code]+0x1f): undefined reference to `std::filesystem::status(std::filesystem::__cxx11::path const&, std::error_code&)' /usr/bin/ld: CMakeFiles/eternity.dir/d_findiwads.cpp.o: in function `std::filesystem::__cxx11::path::path<char*, std::filesystem::__cxx11::path>(char* const&, std::filesystem::__cxx11::path::format)': d_findiwads.cpp:(.text._ZNSt10filesystem7__cxx114pathC2IPcS1_EERKT_NS1_6formatE[_ZNSt10filesystem7__cxx114pathC5IPcS1_EERKT_NS1_6formatE]+0x64): undefined reference to `std::filesystem::__cxx11::path::_M_split_cmpts()' /usr/bin/ld: CMakeFiles/eternity.dir/mn_files.cpp.o: in function `MN_ReadDirectory(mndir_s*, char const*, char const* const*, unsigned long, bool)': mn_files.cpp:(.text+0x615): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator*() const' /usr/bin/ld: mn_files.cpp:(.text+0x817): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator++()' /usr/bin/ld: CMakeFiles/eternity.dir/mn_files.cpp.o: in function `std::filesystem::__cxx11::path::operator/=(std::filesystem::__cxx11::path const&)': mn_files.cpp:(.text._ZNSt10filesystem7__cxx114pathdVERKS1_[_ZNSt10filesystem7__cxx114pathdVERKS1_]+0x3d): undefined reference to `std::filesystem::__cxx11::path::has_filename() const' /usr/bin/ld: mn_files.cpp:(.text._ZNSt10filesystem7__cxx114pathdVERKS1_[_ZNSt10filesystem7__cxx114pathdVERKS1_]+0x98): undefined reference to `std::filesystem::__cxx11::path::_M_split_cmpts()' /usr/bin/ld: CMakeFiles/eternity.dir/mn_files.cpp.o: in function `std::filesystem::__cxx11::path::is_absolute() const': mn_files.cpp:(.text._ZNKSt10filesystem7__cxx114path11is_absoluteEv[_ZNKSt10filesystem7__cxx114path11is_absoluteEv]+0x14): undefined reference to `std::filesystem::__cxx11::path::has_root_directory() const' /usr/bin/ld: CMakeFiles/eternity.dir/mn_files.cpp.o: in function `std::filesystem::exists(std::filesystem::__cxx11::path const&)': mn_files.cpp:(.text._ZNSt10filesystem6existsERKNS_7__cxx114pathE[_ZNSt10filesystem6existsERKNS_7__cxx114pathE]+0x14): undefined reference to `std::filesystem::status(std::filesystem::__cxx11::path const&)' /usr/bin/ld: CMakeFiles/eternity.dir/mn_files.cpp.o: in function `std::filesystem::__cxx11::path::path<char [3], std::filesystem::__cxx11::path>(char const (&) [3], std::filesystem::__cxx11::path::format)': mn_files.cpp:(.text._ZNSt10filesystem7__cxx114pathC2IA3_cS1_EERKT_NS1_6formatE[_ZNSt10filesystem7__cxx114pathC5IA3_cS1_EERKT_NS1_6formatE]+0x5e): undefined reference to `std::filesystem::__cxx11::path::_M_split_cmpts()' /usr/bin/ld: CMakeFiles/eternity.dir/w_wad.cpp.o: in function `WadDirectory::addDirectory(char const*)': w_wad.cpp:(.text+0x1512): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator*() const' /usr/bin/ld: w_wad.cpp:(.text+0x164d): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator++()' /usr/bin/ld: CMakeFiles/eternity.dir/w_wad.cpp.o: in function `W_recurseFiles(Collection<ArchiveDirFile>&, char const*, char const*, Collection<qstring>&, int)': w_wad.cpp:(.text+0x1cb2): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator*() const' /usr/bin/ld: w_wad.cpp:(.text+0x1f4e): undefined reference to `std::filesystem::__cxx11::directory_iterator::operator++()' /usr/bin/ld: CMakeFiles/eternity.dir/w_wad.cpp.o: in function `std::filesystem::__cxx11::directory_entry::file_size() const': w_wad.cpp:(.text._ZNKSt10filesystem7__cxx1115directory_entry9file_sizeEv[_ZNKSt10filesystem7__cxx1115directory_entry9file_sizeEv]+0x14): undefined reference to `std::filesystem::file_size(std::filesystem::__cxx11::path const&)' collect2: error: ld returned 1 exit status make[2]: *** [source/CMakeFiles/eternity.dir/build.make:3919: source/eternity] Error 1 make[1]: *** [CMakeFiles/Makefile2:366: source/CMakeFiles/eternity.dir/all] Error 2 make: *** [Makefile:152: all] Error 2 0 Quote Share this post Link to post
Altazimuth Posted July 20, 2019 (edited) Wait what? It should be fine. It looks like the compiler is set to C++11 for some reason when it comes to linking or something, even though this is in the CMakeLists.txt: if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") TRY_CXX_COMPILER_FLAG(-std=c++17 FLAG_CXX_stdcxx17) endif() I'm baffled. Do you need to separately download libstdc++ or something? Are you using g++ or Clang? EDIT: Think I fixed it. Please re-run CMake and try again. Edited July 20, 2019 by Altazimuth 0 Quote Share this post Link to post
grommile Posted July 20, 2019 After a bit of a poke around... whatever's blowing up is definitely a problem at my end or Debian's. I wrote a simple test case invoking std::filesystem::directory_iterator and that doesn't work either. Sorry for the noise. 1 Quote Share this post Link to post
Altazimuth Posted July 20, 2019 Don't worry about it. This is a concern since I moved things to C++17 specifically because Buster was out, with versions of GCC and Clang that are capable of compiling C++17 code. If you manage to find out what the issue is please let me know. If it can't be fixed without having to compile a new GCC or install some package not in the apt or whatever also let me know, as at that point I'd probably just deal with this on EE's end. Actually if you're using GCC then could you please test with Clang and vice versa? Could be a compiler error. 0 Quote Share this post Link to post
grommile Posted July 20, 2019 ... Huh. Clang 7 explodes in exactly the same way on my test case. I'll raise it in the Debian BTS, since it's obvious that something is busted in buster. 1 Quote Share this post Link to post
Altazimuth Posted July 20, 2019 (edited) Please do. If it's not a bother I'd like to see the thread as it develop and would appreciate the link to it. As per always, thanks for the report! Edited July 20, 2019 by Altazimuth Forgot to be polite. 0 Quote Share this post Link to post
grommile Posted July 20, 2019 Bug 932546 on the BTS: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=932546 1 Quote Share this post Link to post
grommile Posted July 21, 2019 And we have a maintainer response: "these are features marked as experimental, and you need to link with libstdc++fs.a." 1 Quote Share this post Link to post
Altazimuth Posted July 21, 2019 squints C++17 feature is experimental in C++17-compliant compilers? What? I'll look into fixing it in that case, however that's achieved. 0 Quote Share this post Link to post
printz Posted July 21, 2019 I have the same problem which blocks the Mac builds. Maybe the solution here is as well to sideload the "experimental" filesystem library with Eternity until it becomes official. 0 Quote Share this post Link to post
grommile Posted July 21, 2019 15 hours ago, Altazimuth said: squints C++17 feature is experimental in C++17-compliant compilers? What? I'll look into fixing it in that case, however that's achieved. I suspect the position is "the compiler is compliant, the standard library isn't yet". 1 Quote Share this post Link to post
Altazimuth Posted July 21, 2019 Made a push. Might fix it? Unsure. Please test if you can. 0 Quote Share this post Link to post
grommile Posted July 21, 2019 (edited) Build fails in exactly the same way. It's not a source-level problem, it's a build script-level problem. I'll have a go at tweaking CMakeLists.txt. EDIT: OK. Got it to link and produce a working Eternity binary: diff --git a/CMakeLists.txt b/CMakeLists.txt index 86f73cfa..5050cb28 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -157,6 +157,7 @@ endif() ######################### Compiler: Features ################################## if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") TRY_CXX_COMPILER_FLAG(-std=c++17 FLAG_CXX_stdcxx17) + find_library(FILESYSTEM_LIBRARY libstdc++fs.a PATHS /usr/lib/gcc/x86_64-linux-gnu/8 ) endif() diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index bd7d71ee..94c1671a 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -127,6 +127,10 @@ if(MSVC) endif() endif() +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" ) + target_link_libraries(eternity ${FILESYSTEM_LIBRARY}) +endif() + if(CMAKE_SYSTEM_NAME STREQUAL "Windows") target_link_libraries(eternity version) endif() When I don't have inflamed sinuses, I'll have a look at writing the find_library line properly. Edited July 21, 2019 by grommile adding diff of filthy CMakeLists hacks 1 Quote Share this post Link to post
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.