Project

General

Profile

Bug #49303

FTBFS due to cmake's inability to find std::filesystem on a CentOS8 on aarch64

Added by Kefu Chai about 3 years ago. Updated about 3 years ago.

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

Related to sepia - Bug #49319: use RHEL8 for aarch64 builders New

History

#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

Also available in: Atom PDF