I am trying to use Boost 1.76.0 on an Nvidia Jetson which according to lsb_release -rc
has some Ubuntu 18.04 derivative on it and an ext4 filesystem.
Now when compiling the boost filesystem library
./bootstrap.sh --with-libraries=filesystem
./b2
this succeeds, but when I execute the tests
libs/filesystem/test/
../../../b2
I get a bunch of errors about Function not implemented
:
====== BEGIN OUTPUT ======
BOOST_POSIX_API is defined
BOOST_FILESYSTEM_DECL=
BOOST_SYMBOL_VISIBLE=__attribute__((__visibility__("default")))
current_path() is /home/nvidia/boost_1_76_0/libs/filesystem/test
argv[1] is '/home/nvidia/boost_1_76_0/libs/filesystem/test', changing current_path() to it
current_path() is /home/nvidia/boost_1_76_0/libs/filesystem/test
temp_dir is /home/nvidia/boost_1_76_0/libs/filesystem/test/../op-unit_test-6911-1f1d-e324
file_status test...
ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR
****************************** std::exception *****************************
boost::filesystem::status: Function not implemented: "."
***************************************************************************
EXIT STATUS: 1
====== END OUTPUT ======
LD_LIBRARY_PATH="/home/nvidia/boost_1_76_0/bin.v2/libs/filesystem/build/gcc-7/debug/threading-multi/visibility-hidden:/usr/bin:/usr/lib:/usr/lib32:/usr/lib64:$LD_LIBRARY_PATH
"
export LD_LIBRARY_PATH
status=0
if test $status -ne 0 ; then
echo Skipping test execution due to testing.execute=off
exit 0
fi
"../../../bin.v2/libs/filesystem/test/operations_unit_test.test/gcc-7/debug/threading-multi/visibility-hidden/operations_unit_test" /home/nvidia/boost_1_76_0/libs/filesystem
/test > "../../../bin.v2/libs/filesystem/test/operations_unit_test.test/gcc-7/debug/threading-multi/visibility-hidden/operations_unit_test.output" 2>&1 < /dev/null
status=$?
echo >> "../../../bin.v2/libs/filesystem/test/operations_unit_test.test/gcc-7/debug/threading-multi/visibility-hidden/operations_unit_test.output"
echo EXIT STATUS: $status >> "../../../bin.v2/libs/filesystem/test/operations_unit_test.test/gcc-7/debug/threading-multi/visibility-hidden/operations_unit_test.output"
if test $status -eq 0 ; then
cp "../../../bin.v2/libs/filesystem/test/operations_unit_test.test/gcc-7/debug/threading-multi/visibility-hidden/operations_unit_test.output" "../../../bin.v2/libs/filesy
stem/test/operations_unit_test.test/gcc-7/debug/threading-multi/visibility-hidden/operations_unit_test.run"
fi
verbose=0
if test $status -ne 0 ; then
verbose=1
fi
if test $verbose -eq 1 ; then
echo ====== BEGIN OUTPUT ======
cat "../../../bin.v2/libs/filesystem/test/operations_unit_test.test/gcc-7/debug/threading-multi/visibility-hidden/operations_unit_test.output"
echo ====== END OUTPUT ======
fi
exit $status
...failed testing.capture-output ../../../bin.v2/libs/filesystem/test/operations_unit_test.test/gcc-7/debug/threading-multi/visibility-hidden/operations_unit_test.run...
testing.capture-output ../../../bin.v2/libs/filesystem/test/copy_test.test/gcc-7/debug/threading-multi/visibility-hidden/copy_test.run
Specifically for my use case, the boost::filesystem::status
seems to be the offender.
It seems to me that this exception is raised here, but I'm not sure.
The initial output of ./b2
hints at some filesystem-related stuff not being available, but unfortunately I lack the knowledge to interpret this.
nvidia@nvidia-desktop:~/boost_1_76_0$ ./b2
Performing configuration checks
- default address-model : 64-bit (cached) [1]
- default architecture : arm (cached) [1]
Building the Boost C++ Libraries.
- has stat::st_mtim : yes (cached) [2]
- has stat::st_mtimensec : no (cached) [2]
- has stat::st_mtimespec : no (cached) [2]
- has stat::st_birthtim : no (cached) [2]
- has stat::st_birthtimensec : no (cached) [2]
- has stat::st_birthtimespec : no (cached) [2]
- has statx : no (cached) [2]
- has statx syscall : yes (cached) [2]
- has stat::st_mtim : yes (cached) [3]
- has stat::st_mtimensec : no (cached) [3]
- has stat::st_mtimespec : no (cached) [3]
- has stat::st_birthtim : no (cached) [3]
- has stat::st_birthtimensec : no (cached) [3]
- has stat::st_birthtimespec : no (cached) [3]
- has statx : no (cached) [3]
- has statx syscall : yes (cached) [3]
What is the reason that some filesystem functions would be unavailable on a system made of an ext4 filesystem and an Ubuntu 18.04 linux? Can this be patched without too much effort?