benchmark icon indicating copy to clipboard operation
benchmark copied to clipboard

Help wanted: Using the -lbenchmark option, link-related issues still occur

Open Panhaolin2001 opened this issue 2 years ago • 3 comments

Hi There is a question.

When I specify the libcxx library as the library on which benchmark depends, the following linker error problem occurs.

g++ -O2 -march=corei7-avx -mavx2 -mfma    \
	 -std=c++20 -o AXPY AXPY.cpp -nostdinc++ -nodefaultlibs -isystem   \
	/usr/libcxx/include/c++/v1 -L /usr/libcxx/lib    \
	-Wl,-rpath,/usr/libcxx/lib -lc++ -lc++abi -lm -lc -lgcc_s -lgcc    \
	-lbenchmark -lpthread
/usr/bin/ld: /tmp/cc6urXAZ.o: warning: relocation against `_ZTVN9benchmark8internal17FunctionBenchmarkE' in read-only section `.text.startup'
/usr/bin/ld: /tmp/cc6urXAZ.o: in function `void BM_AXPY_VCL<Vec8f>(benchmark::State&)':
AXPY.cpp:(.text+0x23): undefined reference to `benchmark::State::StartKeepRunning()'
/usr/bin/ld: AXPY.cpp:(.text+0x53): undefined reference to `benchmark::State::StartKeepRunning()'
/usr/bin/ld: /tmp/cc6urXAZ.o: in function `void BM_AXPY_eve<8>(benchmark::State&)':
AXPY.cpp:(.text+0x143): undefined reference to `benchmark::State::StartKeepRunning()'
/usr/bin/ld: AXPY.cpp:(.text+0x173): undefined reference to `benchmark::State::StartKeepRunning()'
/usr/bin/ld: /tmp/cc6urXAZ.o: in function `void BM_AXPY_VCL<Vec4f>(benchmark::State&)':
AXPY.cpp:(.text+0x254): undefined reference to `benchmark::State::StartKeepRunning()'
/usr/bin/ld: /tmp/cc6urXAZ.o:AXPY.cpp:(.text+0x275): more undefined references to `benchmark::State::StartKeepRunning()' follow
/usr/bin/ld: /tmp/cc6urXAZ.o: in function `void BM_AXPY_VCL<Vec8f>(benchmark::State&)':
AXPY.cpp:(.text+0x35): undefined reference to `benchmark::State::FinishKeepRunning()'
/usr/bin/ld: /tmp/cc6urXAZ.o: in function `void BM_AXPY_eve<8>(benchmark::State&)':
AXPY.cpp:(.text+0x155): undefined reference to `benchmark::State::FinishKeepRunning()'
/usr/bin/ld: /tmp/cc6urXAZ.o: in function `void BM_AXPY_VCL<Vec4f>(benchmark::State&)':
AXPY.cpp:(.text+0x262): undefined reference to `benchmark::State::FinishKeepRunning()'
/usr/bin/ld: AXPY.cpp:(.text+0x2d2): undefined reference to `benchmark::State::FinishKeepRunning()'
/usr/bin/ld: /tmp/cc6urXAZ.o: in function `void BM_AXPY_eve<4>(benchmark::State&)':
AXPY.cpp:(.text+0x322): undefined reference to `benchmark::State::FinishKeepRunning()'
/usr/bin/ld: /tmp/cc6urXAZ.o:AXPY.cpp:(.text+0x392): more undefined references to `benchmark::State::FinishKeepRunning()' follow
/usr/bin/ld: /tmp/cc6urXAZ.o: in function `main':
AXPY.cpp:(.text.startup+0x18): undefined reference to `benchmark::Initialize(int*, char**, void (*)())'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x24): undefined reference to `benchmark::ReportUnrecognizedArguments(int, char**)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x36): undefined reference to `benchmark::RunSpecifiedBenchmarks()'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x3b): undefined reference to `benchmark::Shutdown()'
/usr/bin/ld: /tmp/cc6urXAZ.o: in function `_GLOBAL__sub_I__ZNSt12experimental14parallelism_v26all_ofEb':
AXPY.cpp:(.text.startup+0x6b): undefined reference to `benchmark::internal::InitializeStreams()'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x7f): undefined reference to `std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(char const*, unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x86): undefined reference to `std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()'
/usr/bin/ld: AXPY.cpp:(.text.startup+0xe6): undefined reference to `std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(char const*, unsigned long, unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0xfd): undefined reference to `std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::append(char const*, unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x122): undefined reference to `std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(char const*, unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x150): undefined reference to `operator new(unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x162): undefined reference to `benchmark::internal::Benchmark::Benchmark(char const*)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x173): undefined reference to `vtable for benchmark::internal::FunctionBenchmark'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x183): undefined reference to `benchmark::internal::RegisterBenchmarkInternal(benchmark::internal::Benchmark*)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x18d): undefined reference to `operator new(unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x19f): undefined reference to `benchmark::internal::Benchmark::Benchmark(char const*)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x1b9): undefined reference to `benchmark::internal::RegisterBenchmarkInternal(benchmark::internal::Benchmark*)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x1c3): undefined reference to `operator new(unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x1d5): undefined reference to `benchmark::internal::Benchmark::Benchmark(char const*)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x1ef): undefined reference to `benchmark::internal::RegisterBenchmarkInternal(benchmark::internal::Benchmark*)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x1f9): undefined reference to `operator new(unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x20b): undefined reference to `benchmark::internal::Benchmark::Benchmark(char const*)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x225): undefined reference to `benchmark::internal::RegisterBenchmarkInternal(benchmark::internal::Benchmark*)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x22f): undefined reference to `operator new(unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x241): undefined reference to `benchmark::internal::Benchmark::Benchmark(char const*)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x25b): undefined reference to `benchmark::internal::RegisterBenchmarkInternal(benchmark::internal::Benchmark*)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x265): undefined reference to `operator new(unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x277): undefined reference to `benchmark::internal::Benchmark::Benchmark(char const*)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x291): undefined reference to `benchmark::internal::RegisterBenchmarkInternal(benchmark::internal::Benchmark*)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x29b): undefined reference to `operator new(unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x2ad): undefined reference to `benchmark::internal::Benchmark::Benchmark(char const*)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x2c7): undefined reference to `benchmark::internal::RegisterBenchmarkInternal(benchmark::internal::Benchmark*)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x2d1): undefined reference to `operator new(unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x2e3): undefined reference to `benchmark::internal::Benchmark::Benchmark(char const*)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x2fd): undefined reference to `benchmark::internal::RegisterBenchmarkInternal(benchmark::internal::Benchmark*)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x307): undefined reference to `operator new(unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x319): undefined reference to `benchmark::internal::Benchmark::Benchmark(char const*)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x333): undefined reference to `benchmark::internal::RegisterBenchmarkInternal(benchmark::internal::Benchmark*)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x33d): undefined reference to `operator new(unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x34f): undefined reference to `benchmark::internal::Benchmark::Benchmark(char const*)'
/usr/bin/ld: AXPY.cpp:(.text.startup+0x371): undefined reference to `benchmark::internal::RegisterBenchmarkInternal(benchmark::internal::Benchmark*)'
/usr/bin/ld: /tmp/cc6urXAZ.o: in function `_GLOBAL__sub_I__ZNSt12experimental14parallelism_v26all_ofEb.cold':
AXPY.cpp:(.text.unlikely+0x7): undefined reference to `std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0xf): undefined reference to `_Unwind_Resume'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0x1f): undefined reference to `operator delete(void*, unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0x27): undefined reference to `_Unwind_Resume'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0x37): undefined reference to `operator delete(void*, unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0x3f): undefined reference to `_Unwind_Resume'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0x4f): undefined reference to `operator delete(void*, unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0x57): undefined reference to `_Unwind_Resume'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0x67): undefined reference to `operator delete(void*, unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0x6f): undefined reference to `_Unwind_Resume'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0x7f): undefined reference to `operator delete(void*, unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0x87): undefined reference to `_Unwind_Resume'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0x97): undefined reference to `operator delete(void*, unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0x9f): undefined reference to `_Unwind_Resume'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0xaf): undefined reference to `operator delete(void*, unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0xb7): undefined reference to `_Unwind_Resume'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0xc7): undefined reference to `operator delete(void*, unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0xcf): undefined reference to `_Unwind_Resume'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0xdf): undefined reference to `operator delete(void*, unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0xe7): undefined reference to `_Unwind_Resume'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0xf7): undefined reference to `operator delete(void*, unsigned long)'
/usr/bin/ld: AXPY.cpp:(.text.unlikely+0xff): undefined reference to `_Unwind_Resume'
/usr/bin/ld: /tmp/cc6urXAZ.o:(.data.rel.local.DW.ref.__gxx_personality_v0[DW.ref.__gxx_personality_v0]+0x0): undefined reference to `__gxx_personality_v0'
/usr/bin/ld: warning: creating DT_TEXTREL in a PIE
collect2: error: ld returned 1 exit status

However, no errors are reported if the compilation command is below. g++ -O2 -march=corei7-avx -mavx2 -mfma -std=c++20 -o AXPY AXPY.cpp -lbenchmark -lpthread

Is there any way to compile successfully based on my designation of libcxx as a dependency library? thx!!!

Panhaolin2001 avatar Jul 05 '22 02:07 Panhaolin2001

i wonder if this is because your version of the benchmark library was not built against libcxx.

dmah42 avatar Jul 05 '22 08:07 dmah42

I bet it's the usual pitfail of "ordering of linking matters". Does it help if you link to benchmark before linking to c++ std lib?

LebedevRI avatar Jul 05 '22 11:07 LebedevRI

I tried to change the order of linking -lbenchmark and -lpthread, but a new error appeared.

/usr/bin/ld: sysinfo.cc:(.text+0x3914): undefined reference to `std::basic_filebuf<char, std::char_traits<char> >::close()'
/usr/bin/ld: sysinfo.cc:(.text+0x3921): undefined reference to `std::__basic_file<char>::~__basic_file()'
/usr/bin/ld: sysinfo.cc:(.text+0x3928): undefined reference to `vtable for std::basic_streambuf<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text+0x393d): undefined reference to `std::locale::~locale()'
/usr/bin/ld: sysinfo.cc:(.text+0x3944): undefined reference to `VTT for std::basic_ifstream<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text+0x3950): undefined reference to `VTT for std::basic_ifstream<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text+0x396b): undefined reference to `vtable for std::basic_ios<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text+0x3984): undefined reference to `std::ios_base::~ios_base()'
/usr/bin/ld: sysinfo.cc:(.text+0x3a88): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned long&, unsigned long)'
/usr/bin/ld: sysinfo.cc:(.text+0x3b44): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::reserve(unsigned long)'
/usr/bin/ld: sysinfo.cc:(.text+0x3b74): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_append(char const*, unsigned long)'
/usr/bin/ld: sysinfo.cc:(.text+0x3b8c): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_append(char const*, unsigned long)'
/usr/bin/ld: sysinfo.cc:(.text+0x3ca7): undefined reference to `std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)'
/usr/bin/ld: sysinfo.cc:(.text+0x3cb7): undefined reference to `std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)'
/usr/bin/ld: sysinfo.cc:(.text+0x3cfb): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned long&, unsigned long)'
/usr/bin/ld: sysinfo.cc:(.text+0x3d3e): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: sysinfo.cc:(.text+0x3d5e): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: sysinfo.cc:(.text+0x3d7e): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: sysinfo.cc:(.text+0x3d9e): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: sysinfo.cc:(.text+0x3dbe): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: sysinfo.cc:(.text+0x3ddd): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned long&, unsigned long)'
/usr/bin/ld: sysinfo.cc:(.text+0x3e93): undefined reference to `vtable for std::basic_ifstream<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text+0x3eb6): undefined reference to `vtable for std::basic_filebuf<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text+0x3ec3): undefined reference to `std::basic_filebuf<char, std::char_traits<char> >::close()'
/usr/bin/ld: sysinfo.cc:(.text+0x3ed0): undefined reference to `std::__basic_file<char>::~__basic_file()'
/usr/bin/ld: sysinfo.cc:(.text+0x3ed7): undefined reference to `vtable for std::basic_streambuf<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text+0x3eec): undefined reference to `std::locale::~locale()'
/usr/bin/ld: sysinfo.cc:(.text+0x3ef3): undefined reference to `VTT for std::basic_ifstream<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text+0x3eff): undefined reference to `VTT for std::basic_ifstream<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text+0x3f1a): undefined reference to `vtable for std::basic_ios<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text+0x3f33): undefined reference to `std::ios_base::~ios_base()'
/usr/bin/ld: sysinfo.cc:(.text+0x3fdd): undefined reference to `std::__throw_out_of_range_fmt(char const*, ...)'
/usr/bin/ld: sysinfo.cc:(.text+0x3fe9): undefined reference to `std::__throw_length_error(char const*)'
/usr/bin/ld: sysinfo.cc:(.text+0x3ff5): undefined reference to `std::__throw_invalid_argument(char const*)'
/usr/bin/ld: sysinfo.cc:(.text+0x4001): undefined reference to `std::__throw_out_of_range(char const*)'
/usr/bin/ld: sysinfo.cc:(.text+0x400d): undefined reference to `std::__throw_logic_error(char const*)'
/usr/bin/ld: sysinfo.cc:(.text+0x4014): undefined reference to `std::cerr'
/usr/bin/ld: sysinfo.cc:(.text+0x403b): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)'
/usr/bin/ld: sysinfo.cc:(.text+0x4054): undefined reference to `std::cerr'
/usr/bin/ld: sysinfo.cc:(.text+0x4098): undefined reference to `std::__throw_length_error(char const*)'
/usr/bin/ld: sysinfo.cc:(.text+0x40a4): undefined reference to `std::__throw_logic_error(char const*)'
/usr/bin/ld: sysinfo.cc:(.text+0x40c8): undefined reference to `std::__throw_logic_error(char const*)'
/usr/bin/ld: sysinfo.cc:(.text+0x40d4): undefined reference to `std::__throw_logic_error(char const*)'
/usr/bin/ld: sysinfo.cc:(.text+0x4120): undefined reference to `std::__throw_out_of_range(char const*)'
/usr/bin/ld: sysinfo.cc:(.text+0x412c): undefined reference to `std::__throw_invalid_argument(char const*)'
/usr/bin/ld: /usr/local/lib/libbenchmark.a(sysinfo.cc.o): in function `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) [clone .isra.0]':
sysinfo.cc:(.text+0x2b): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)'
/usr/bin/ld: sysinfo.cc:(.text+0x44): undefined reference to `std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)'
/usr/bin/ld: /usr/local/lib/libbenchmark.a(sysinfo.cc.o): in function `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&) [clone .isra.0]':
sysinfo.cc:(.text+0x8f): undefined reference to `std::ostream::flush()'
/usr/bin/ld: /usr/local/lib/libbenchmark.a(sysinfo.cc.o): in function `bool benchmark::(anonymous namespace)::ReadFromFile<long>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, long*) [clone .isra.0] [clone .cold]':
sysinfo.cc:(.text.unlikely+0x22): undefined reference to `std::basic_filebuf<char, std::char_traits<char> >::~basic_filebuf()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x2d): undefined reference to `VTT for std::basic_ifstream<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x47): undefined reference to `vtable for std::basic_ios<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x57): undefined reference to `std::ios_base::~ios_base()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x76): undefined reference to `std::basic_ifstream<char, std::char_traits<char> >::~basic_ifstream()'
/usr/bin/ld: /usr/local/lib/libbenchmark.a(sysinfo.cc.o): in function `benchmark::(anonymous namespace)::GetCPUCyclesPerSecond(benchmark::CPUInfo::Scaling) [clone .cold]':
sysinfo.cc:(.text.unlikely+0xb0): undefined reference to `std::basic_ifstream<char, std::char_traits<char> >::~basic_ifstream()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x116): undefined reference to `std::basic_filebuf<char, std::char_traits<char> >::~basic_filebuf()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x11d): undefined reference to `VTT for std::basic_ifstream<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x124): undefined reference to `VTT for std::basic_ifstream<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x150): undefined reference to `vtable for std::basic_ios<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x15d): undefined reference to `std::ios_base::~ios_base()'
/usr/bin/ld: /usr/local/lib/libbenchmark.a(sysinfo.cc.o): in function `bool benchmark::(anonymous namespace)::ReadFromFile<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) [clone .cold]':
sysinfo.cc:(.text.unlikely+0x189): undefined reference to `std::basic_filebuf<char, std::char_traits<char> >::~basic_filebuf()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x194): undefined reference to `VTT for std::basic_ifstream<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x1ae): undefined reference to `vtable for std::basic_ios<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x1be): undefined reference to `std::ios_base::~ios_base()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x1df): undefined reference to `std::basic_ifstream<char, std::char_traits<char> >::~basic_ifstream()'
/usr/bin/ld: /usr/local/lib/libbenchmark.a(sysinfo.cc.o): in function `benchmark::(anonymous namespace)::CpuScaling(int) [clone .cold]':
sysinfo.cc:(.text.unlikely+0x214): undefined reference to `std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_ostringstream()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x229): undefined reference to `VTT for std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x240): undefined reference to `vtable for std::basic_ios<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x250): undefined reference to `std::ios_base::~ios_base()'
/usr/bin/ld: /usr/local/lib/libbenchmark.a(sysinfo.cc.o): in function `benchmark::(anonymous namespace)::GetNumCPUs() [clone .cold]':
sysinfo.cc:(.text.unlikely+0x2af): undefined reference to `std::basic_ifstream<char, std::char_traits<char> >::~basic_ifstream()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x2bf): undefined reference to `std::basic_filebuf<char, std::char_traits<char> >::~basic_filebuf()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x2c6): undefined reference to `VTT for std::basic_ifstream<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x2cd): undefined reference to `VTT for std::basic_ifstream<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x2f9): undefined reference to `vtable for std::basic_ios<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x306): undefined reference to `std::ios_base::~ios_base()'
/usr/bin/ld: /usr/local/lib/libbenchmark.a(sysinfo.cc.o): in function `benchmark::(anonymous namespace)::GetCacheSizesFromKVFS() [clone .cold]':
sysinfo.cc:(.text.unlikely+0x351): undefined reference to `std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_ostringstream()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x3fd): undefined reference to `std::basic_ifstream<char, std::char_traits<char> >::~basic_ifstream()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x4c8): undefined reference to `std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_ostringstream()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x4de): undefined reference to `VTT for std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x4e5): undefined reference to `VTT for std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x505): undefined reference to `vtable for std::basic_ios<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x512): undefined reference to `std::ios_base::~ios_base()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x531): undefined reference to `std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_ostringstream()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x547): undefined reference to `VTT for std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x54e): undefined reference to `VTT for std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x56e): undefined reference to `vtable for std::basic_ios<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x57b): undefined reference to `std::ios_base::~ios_base()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x591): undefined reference to `VTT for std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x598): undefined reference to `VTT for std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x5b8): undefined reference to `vtable for std::basic_ios<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x5c5): undefined reference to `std::ios_base::~ios_base()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x5e4): undefined reference to `std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_ostringstream()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x5fa): undefined reference to `VTT for std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x601): undefined reference to `VTT for std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x621): undefined reference to `vtable for std::basic_ios<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x62e): undefined reference to `std::ios_base::~ios_base()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x644): undefined reference to `VTT for std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x64b): undefined reference to `VTT for std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x66b): undefined reference to `vtable for std::basic_ios<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x678): undefined reference to `std::ios_base::~ios_base()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x6af): undefined reference to `std::basic_ifstream<char, std::char_traits<char> >::~basic_ifstream()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x6d2): undefined reference to `std::basic_filebuf<char, std::char_traits<char> >::~basic_filebuf()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x6d9): undefined reference to `VTT for std::basic_ifstream<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x6e0): undefined reference to `VTT for std::basic_ifstream<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x707): undefined reference to `vtable for std::basic_ios<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x717): undefined reference to `std::ios_base::~ios_base()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x726): undefined reference to `std::basic_filebuf<char, std::char_traits<char> >::~basic_filebuf()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x72d): undefined reference to `VTT for std::basic_ifstream<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x734): undefined reference to `VTT for std::basic_ifstream<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x760): undefined reference to `vtable for std::basic_ios<char, std::char_traits<char> >'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x76d): undefined reference to `std::ios_base::~ios_base()'
/usr/bin/ld: sysinfo.cc:(.text.unlikely+0x7a2): undefined reference to `std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_ostringstream()'
/usr/bin/ld: /usr/local/lib/libbenchmark.a(sysinfo.cc.o): in function `void std::vector<benchmark::CPUInfo::CacheInfo, std::allocator<benchmark::CPUInfo::CacheInfo> >::_M_realloc_insert<benchmark::CPUInfo::CacheInfo const&>(__gnu_cxx::__normal_iterator<benchmark::CPUInfo::CacheInfo*, std::vector<benchmark::CPUInfo::CacheInfo, std::allocator<benchmark::CPUInfo::CacheInfo> > >, benchmark::CPUInfo::CacheInfo const&)':
sysinfo.cc:(.text._ZNSt6vectorIN9benchmark7CPUInfo9CacheInfoESaIS2_EE17_M_realloc_insertIJRKS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_[_ZNSt6vectorIN9benchmark7CPUInfo9CacheInfoESaIS2_EE17_M_realloc_insertIJRKS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_]+0x2eb): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned long&, unsigned long)'
/usr/bin/ld: sysinfo.cc:(.text._ZNSt6vectorIN9benchmark7CPUInfo9CacheInfoESaIS2_EE17_M_realloc_insertIJRKS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_[_ZNSt6vectorIN9benchmark7CPUInfo9CacheInfoESaIS2_EE17_M_realloc_insertIJRKS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_]+0x35c): undefined reference to `std::__throw_length_error(char const*)'
/usr/bin/ld: sysinfo.cc:(.text._ZNSt6vectorIN9benchmark7CPUInfo9CacheInfoESaIS2_EE17_M_realloc_insertIJRKS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_[_ZNSt6vectorIN9benchmark7CPUInfo9CacheInfoESaIS2_EE17_M_realloc_insertIJRKS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_]+0x368): undefined reference to `std::__throw_logic_error(char const*)'
/usr/bin/ld: /usr/local/lib/libbenchmark.a(sysinfo.cc.o): in function `std::vector<double, std::allocator<double> >::_M_default_append(unsigned long)':
sysinfo.cc:(.text._ZNSt6vectorIdSaIdEE17_M_default_appendEm[_ZNSt6vectorIdSaIdEE17_M_default_appendEm]+0x1bf): undefined reference to `std::__throw_length_error(char const*)'
/usr/bin/ld: /usr/local/lib/libbenchmark.a(sysinfo.cc.o): in function `_GLOBAL__sub_I__ZN9benchmark7CPUInfo3GetEv':
sysinfo.cc:(.text.startup+0x15): undefined reference to `std::ios_base::Init::Init()'
/usr/bin/ld: sysinfo.cc:(.text.startup+0x1c): undefined reference to `std::ios_base::Init::~Init()'
/usr/bin/ld: /usr/local/lib/libbenchmark.a(sysinfo.cc.o):(.data.rel.ro+0x0): undefined reference to `vtable for std::__cxx11::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >'
/usr/bin/ld: /usr/local/lib/libbenchmark.a(sysinfo.cc.o):(.data.rel.ro+0x8): undefined reference to `vtable for std::basic_streambuf<char, std::char_traits<char> >'
/usr/bin/ld: /usr/local/lib/libbenchmark.a(benchmark_api_internal.cc.o): in function `benchmark::internal::BenchmarkInstance::BenchmarkInstance(benchmark::internal::Benchmark*, int, int, std::vector<long, std::allocator<long> > const&, int)':
benchmark_api_internal.cc:(.text+0x520): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: benchmark_api_internal.cc:(.text+0x5b4): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_append(char const*, unsigned long)'
/usr/bin/ld: benchmark_api_internal.cc:(.text+0x753): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_append(char const*, unsigned long)'
/usr/bin/ld: benchmark_api_internal.cc:(.text+0x8e8): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_append(char const*, unsigned long)'
/usr/bin/ld: benchmark_api_internal.cc:(.text+0x921): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long)'
/usr/bin/ld: benchmark_api_internal.cc:(.text+0x9c8): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_append(char const*, unsigned long)'
/usr/bin/ld: benchmark_api_internal.cc:(.text+0x9f6): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace(unsigned long, unsigned long, char const*, unsigned long)'
/usr/bin/ld: benchmark_api_internal.cc:(.text+0xcc5): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long)'
/usr/bin/ld: benchmark_api_internal.cc:(.text+0xee2): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long)'
/usr/bin/ld: benchmark_api_internal.cc:(.text+0xf85): undefined reference to `std::__throw_length_error(char const*)'
/usr/bin/ld: benchmark_api_internal.cc:(.text+0xf91): undefined reference to `std::__throw_length_error(char const*)'
/usr/bin/ld: /usr/local/lib/libbenchmark.a(timers.cc.o): in function `benchmark::(anonymous namespace)::DiagnoseAndExit(char const*)':
timers.cc:(.text+0x5): undefined reference to `std::cerr'
/usr/bin/ld: timers.cc:(.text+0x21): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)'
/usr/bin/ld: timers.cc:(.text+0x2c): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: timers.cc:(.text+0x59): undefined reference to `std::ostream::put(char)'
/usr/bin/ld: timers.cc:(.text+0x61): undefined reference to `std::ostream::flush()'
/usr/bin/ld: timers.cc:(.text+0x73): undefined reference to `std::ctype<char>::_M_widen_init() const'
/usr/bin/ld: timers.cc:(.text+0x8c): undefined reference to `std::__throw_bad_cast()'
/usr/bin/ld: /usr/local/lib/libbenchmark.a(timers.cc.o): in function `benchmark::LocalDateTimeString[abi:cxx11]()':
timers.cc:(.text+0x1a7): undefined reference to `std::chrono::_V2::system_clock::now()'
/usr/bin/ld: timers.cc:(.text+0x39b): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned long&, unsigned long)'
/usr/bin/ld: /usr/local/lib/libbenchmark.a(timers.cc.o): in function `_GLOBAL__sub_I__ZN9benchmark15ProcessCPUUsageEv':
timers.cc:(.text.startup+0x15): undefined reference to `std::ios_base::Init::Init()'
/usr/bin/ld: timers.cc:(.text.startup+0x1c): undefined reference to `std::ios_base::Init::~Init()'
/usr/bin/ld: warning: creating DT_TEXTREL in a PIE
collect2: error: ld returned 1 exit status

Probably because I wasn't using libcxx when I built benchmark. So, how to modify benchmark's CmakeList to build benchmark using libcxx?

Panhaolin2001 avatar Jul 05 '22 14:07 Panhaolin2001

the sanitizer github workflow does this by setting "-DCMAKE_CXX_FLAGS" and "-DCMAKE_C_FLAGS" to both include "-stdlib=libc++".

i imagine if you do this when you use cmake to set up the benchmark build it would work.

dmah42 avatar Mar 14 '23 13:03 dmah42