Bug #49303
FTBFS due to cmake's inability to find std::filesystem on a CentOS8 on aarch64
Status:
In Progress
Priority:
Normal
Assignee:
-
Category:
-
Target version:
-
% Done:
0%
Source:
Tags:
Backport:
Regression:
No
Severity:
3 - minor
Reviewed:
Affected Versions:
ceph-qa-suite:
Component(RADOS):
Pull request ID:
Crash signature (v1):
Crash signature (v2):
Description
+ cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib64 -DCMAKE_INSTALL_LIBEXECDIR=/usr/libexec -DCMAKE_INSTALL_LOCALSTATEDIR=/var -DCMAKE_INSTALL_SYSCONFDIR=/etc -DCMAKE_INSTALL_MANDIR=/usr/share/man -DCMAKE_INSTALL_DOCDIR=/usr/share/doc/ceph -DCMAKE_INSTALL_INCLUDEDIR=/usr/include -DCMAKE_INSTALL_SYSTEMD_SERVICEDIR=/usr/lib/systemd/system -DWITH_MANPAGE=ON -DWITH_PYTHON3=3.6 -DWITH_MGR_DASHBOARD_FRONTEND=OFF -DWITH_SELINUX=ON -DWITH_LTTNG=ON -DWITH_BABELTRACE=ON -DWITH_SEASTAR=ON -DWITH_OCF=ON -DWITH_LIBRADOSSTRIPER=ON -DWITH_RADOSGW_AMQP_ENDPOINT=ON -DWITH_RADOSGW_KAFKA_ENDPOINT=ON -DBOOST_J=32 -DWITH_GRAFANA=ON -- The CXX compiler identification is GNU 9.2.1 -- The C compiler identification is GNU 9.2.1 -- The ASM compiler identification is GNU -- Found assembler: /opt/rh/gcc-toolset-9/root/usr/bin/cc -- Check for working CXX compiler: /opt/rh/gcc-toolset-9/root/usr/bin/c++ -- Check for working CXX compiler: /opt/rh/gcc-toolset-9/root/usr/bin/c++ -- works ... -- Found Boost: /home/jenkins-build/build/workspace/ceph-dev-new-build/ARCH/arm64/AVAILABLE_ARCH/arm64/AVAILABLE_DIST/centos8/DIST/centos8/MACHINE_SIZE/gigantic/release/17.0.0-812-gc7d4009b/rpm/el8/BUILD/ceph-17.0.0-812-gc7d4009b/build/boost/include CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:137 (message): Could NOT find StdFilesystem (missing: StdFilesystem_LIBRARY) Call Stack (most recent call first): /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE) cmake/modules/FindStdFilesystem.cmake:45 (find_package_handle_standard_args) CMakeLists.txt:652 (find_package) -- Configuring incomplete, errors occurred!
$ g++ -std=c++17 FindStdFilesystem_test.cc/bin/ld: a.out: hidden symbol `_ZNSt10filesystem9_Dir_base7advanceEbRSt10error_code' isn't defined/bin/ld: final link failed: Bad valuecollect2: error: ld returned 1 exit status $ c++filt _ZNSt10filesystem9_Dir_base7advanceEbRSt10error_codestd::filesystem::_Dir_base::advance(bool, std::error_code&) $ nm -C /opt/rh/gcc-toolset-9/root/usr/lib/gcc/aarch64-redhat-linux/9/libstdc++.a | grep _Dir_basenm: compatibility-debug_list-2.o: no symbolsnm: compatibility-c++0x.o: no symbolsnm: compatibility-atomic-c++0x.o: no symbolsnm: compatibility-thread-c++0x.o: no symbolsnm: atexit_arm.o: no symbolsnm: eh_arm.o: no symbolsnm: tinfo2.o: no symbolsnm: math_stubs_float.o: no symbolsnm: math_stubs_long_double.o: no symbols0000000000000000 W std::filesystem::_Dir_base::_Dir_base(char const*, bool, std::error_code&)0000000000000000 W std::filesystem::_Dir_base::_Dir_base(char const*, bool, std::error_code&)0000000000000000 n std::filesystem::_Dir_base::_Dir_base(char const*, bool, std::error_code&)0000000000000000 W std::filesystem::_Dir_base::_Dir_base(char const*, bool, std::error_code&)0000000000000000 W std::filesystem::_Dir_base::_Dir_base(char const*, bool, std::error_code&)0000000000000000 n std::filesystem::_Dir_base::_Dir_base(char const*, bool, std::error_code&) $ nm -C /opt/rh/gcc-toolset-9/root/usr/lib/gcc/aarch64-redhat-linux/9/libstdc++fs.a | grep _Dir_base0000000000000000 W std::filesystem::_Dir_base::_Dir_base(char const*, bool, std::error_code&)0000000000000000 W std::filesystem::_Dir_base::_Dir_base(char const*, bool, std::error_code&)0000000000000000 n std::filesystem::_Dir_base::_Dir_base(char const*, bool, std::error_code&)0000000000000000 W std::filesystem::_Dir_base::_Dir_base(char const*, bool, std::error_code&)0000000000000000 W std::filesystem::_Dir_base::_Dir_base(char const*, bool, std::error_code&)0000000000000000 n std::filesystem::_Dir_base::_Dir_base(char const*, bool, std::error_code&) $ nm -C /opt/rh/gcc-toolset-9/root/usr/lib/gcc/aarch64-redhat-linux/9/libstdc++_nonshared.a | grep _Dir_base U std::filesystem::_Dir_base::advance(bool, std::error_code&)0000000000000000 W std::filesystem::_Dir_base::_Dir_base(char const*, bool, std::error_code&)0000000000000000 W std::filesystem::_Dir_base::_Dir_base(char const*, bool, std::error_code&)0000000000000000 n std::filesystem::_Dir_base::_Dir_base(char const*, bool, std::error_code&) U std::filesystem::_Dir_base::advance(bool, std::error_code&)0000000000000000 W std::filesystem::_Dir_base::_Dir_base(char const*, bool, std::error_code&)0000000000000000 W std::filesystem::_Dir_base::_Dir_base(char const*, bool, std::error_code&)0000000000000000 n std::filesystem::_Dir_base::_Dir_base(char const*, bool, std::error_code&)
Related issues
History
#1 Updated by Kefu Chai about 3 years ago
#2 Updated by Kefu Chai about 3 years ago
created https://github.com/ceph/ceph/pull/39491 in hope to work around this.
#3 Updated by Deepika Upadhyay about 3 years ago
hey Kefu! Should we use this workaround meanwhile the real bug is being fixed?
# set everything up for c++ 17 features
set(CMAKE_CXX_STANDARD 17)
# Don't add this line if you will try_compile with boost.
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# test that filesystem header actually is there and works
try_compile(HAS_FS "${CMAKE_BINARY_DIR}/temp"
"${CMAKE_SOURCE_DIR}/tests/has_filesystem.cc"
CMAKE_FLAGS -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD_REQUIRED=ON
LINK_LIBRARIES stdc++fs)
if(HAS_FS)
message(STATUS "Compiler has filesystem support")
else()
# .... You could also try searching for boost::filesystem here.
message(FATAL_ERROR "Compiler is missing filesystem capabilities")
endif(HAS_FS)
https://stackoverflow.com/questions/54290254/problem-adding-stdfilesystem-to-cmake-project
#4 Updated by Kefu Chai about 3 years ago
Deepika, I don't understand why or how the "workaround" addresses the issue here. probably you could file a PR based on it?
EDIT, personally, I don't really want to use boost::filesystem as a fallback.
#5 Updated by Kefu Chai about 3 years ago
- Related to Bug #49319: use RHEL8 for aarch64 builders added