Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

undefined reference to `seastar::logger::failed_to_log #2181

Open
robinchrist opened this issue Apr 13, 2024 · 6 comments
Open

undefined reference to `seastar::logger::failed_to_log #2181

robinchrist opened this issue Apr 13, 2024 · 6 comments

Comments

@robinchrist
Copy link

robinchrist commented Apr 13, 2024

When building a very simple test application

# Make sure we use a relatively recent version - 3.27 is Nov 2023
cmake_minimum_required(VERSION 3.27)

project ("Kataklysmos")

find_package (Seastar REQUIRED)

add_executable (my_app
  src/main.cpp)

target_link_libraries (my_app PUBLIC Seastar::seastar)
#include <seastar/core/app-template.hh>
#include <seastar/core/seastar.hh>
#include <seastar/util/log.hh>

using namespace seastar;
logger applog("app");

int main(int argc, char** argv) {
    seastar::app_template app;
    app.run(argc, argv, [] () -> future<> {
        applog.info("Hello world!");
        return make_ready_future<>();
    });
}

I get the following linker error:

[3/3] Linking CXX executable my_app
FAILED: my_app 
: && /usr/bin/c++ -O3 -DNDEBUG  CMakeFiles/my_app.dir/src/main.cpp.o -o my_app  /data/dev/Kataklysmos/external/seastar/build/release/libseastar.a  /usr/lib/x86_64-linux-gnu/libboost_program_options.so  /usr/lib/x86_64-linux-gnu/libboost_thread.so  /usr/lib/x86_64-linux-gnu/libboost_chrono.so  /usr/lib/x86_64-linux-gnu/libboost_date_time.so  /usr/lib/x86_64-linux-gnu/libboost_atomic.so  /usr/lib/x86_64-linux-gnu/libcares.so  /usr/lib/x86_64-linux-gnu/libfmt.so.9.1.0  /usr/lib/x86_64-linux-gnu/liblz4.so  -ldl  /usr/lib/x86_64-linux-gnu/libgnutls.so  -latomic  /usr/lib/x86_64-linux-gnu/libsctp.so  /usr/lib/x86_64-linux-gnu/libprotobuf.so  /usr/lib/x86_64-linux-gnu/libyaml-cpp.so  /usr/lib/x86_64-linux-gnu/libhwloc.so  /usr/lib/x86_64-linux-gnu/liburing.so  /usr/lib/x86_64-linux-gnu/libnuma.so && :
/usr/bin/ld: CMakeFiles/my_app.dir/src/main.cpp.o: in function `std::_Function_handler<seastar::future<void> (), main::{lambda()#1}>::_M_invoke(std::_Any_data const&) [clone .cold]':
main.cpp:(.text.unlikely+0x40): undefined reference to `seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v9::basic_string_view<char>, seastar::internal::source_location)'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

Seastar was configured with

sudo ./install-dependencies.sh
./configure.py --mode=release --enable-dpdk
ninja -C build/release

with the Valgrind fix from #2180
Tested b74a027 and cd8a913

With Clang (Seastar itself build with default GCC) I get the error:


/data/dev/Kataklysmos/src/main.cpp:32:21: error: call to consteval function 'seastar::logger::format_info<>::format_info<char[13], 0>' is not a constant expression
        applog.info("Hello world!");
                    ^
/data/dev/Kataklysmos/external/seastar/include/seastar/util/log.hh:141:58: note: non-constexpr function 'current' cannot be used in a constant expression
                           compat::source_location loc = compat::source_location::current()) noexcept
                                                         ^
/data/dev/Kataklysmos/external/seastar/include/seastar/util/source_location-compat.hh:50:21: note: declared here
    source_location current(const char* file = __builtin_FILE(), const char* func = __builtin_FUNCTION(), int line = __builtin_LINE(), int col = 0) noexcept {
                    ^
1 warning and 1 error generated.
ninja: build stopped: subcommand failed.
@robinchrist
Copy link
Author

Same result when cooking fmt and upgrading to 10.2.1

robin@WS-DA-7773X:/data/dev/Kataklysmos/build$ ninja
[3/3] Linking CXX executable my_app
FAILED: my_app 
: && /usr/bin/c++ -O3 -DNDEBUG  CMakeFiles/my_app.dir/src/main.cpp.o -o my_app  /data/dev/Kataklysmos/external/seastar/build/release/libseastar.a  /usr/lib/x86_64-linux-gnu/libboost_program_options.so  /usr/lib/x86_64-linux-gnu/libboost_thread.so  /usr/lib/x86_64-linux-gnu/libboost_chrono.so  /usr/lib/x86_64-linux-gnu/libboost_date_time.so  /usr/lib/x86_64-linux-gnu/libboost_atomic.so  /usr/lib/x86_64-linux-gnu/libcares.so  /data/dev/Kataklysmos/external/seastar/build/release/_cooking/installed/lib/libfmt.a  /usr/lib/x86_64-linux-gnu/liblz4.so  -ldl  /usr/lib/x86_64-linux-gnu/libgnutls.so  -latomic  /usr/lib/x86_64-linux-gnu/libsctp.so  /usr/lib/x86_64-linux-gnu/libprotobuf.so  /usr/lib/x86_64-linux-gnu/libyaml-cpp.so  /usr/lib/x86_64-linux-gnu/libhwloc.so  /usr/lib/x86_64-linux-gnu/liburing.so  /usr/lib/x86_64-linux-gnu/libnuma.so && :
/usr/bin/ld: CMakeFiles/my_app.dir/src/main.cpp.o: in function `std::_Function_handler<seastar::future<void> (), main::{lambda()#1}>::_M_invoke(std::_Any_data const&) [clone .cold]':
main.cpp:(.text.unlikely+0x40): undefined reference to `seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, seastar::internal::source_location)'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

@robinchrist
Copy link
Author

Seems to be somehow related to boost?

./configure.py --mode=release --cook fmt --cook Boost --cook valgrind --c++-standard=20 --enable-dpdk

Works at least (with the Valgrind fix).
I haven't had the nerve to test whether removing --cook Boost will fix the issue...

@tchaikov
Copy link
Contributor

@robinchrist hi Robin, so there are two issues here:

  1. undefined reference to seastar::logger::failed_to_log()` with GCC
  2. call to consteval function 'seastar::logger::format_info<>::format_info<char[13], 0>' is not a constant express with Clang

may i learn the version of GCC and the version of Clang which you are using? have you tried to build both you application and Seastar with Clang?

the first issue is a mysterious to me. because this symbol should be included in libseastar.a, could you paste the output of

$ nm -C build/release/libseastar.a | grep failed_to_log
                 U seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)
                 U seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)
                 U seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)
                 U seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)
                 U seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)
                 U seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)
                 U seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)
                 U seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)
                 U seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)
                 U seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)
                 U seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)
                 U seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)
                 U seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)
                 U seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)
                 U seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)
                 U seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)
                 U seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)
0000000000001200 T seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)
0000000000003e50 t seastar::logger::lambda_log_writer<seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)::$_0>::operator()(seastar::internal::log_buf::inserter_iterator)
0000000000003e20 t seastar::logger::lambda_log_writer<seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)::$_0>::~lambda_log_writer()
00000000000012a0 t seastar::logger::lambda_log_writer<seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)::$_0>::~lambda_log_writer()
00000000000000a0 d typeinfo for seastar::logger::lambda_log_writer<seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)::$_0>
0000000000000079 r typeinfo name for seastar::logger::lambda_log_writer<seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)::$_0>
0000000000000078 d vtable for seastar::logger::lambda_log_writer<seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)::$_0>
                 U seastar::logger::failed_to_log(std::__exception_ptr::exception_ptr, fmt::v10::basic_string_view<char>, std::source_location)

@robinchrist
Copy link
Author

It seems like this was related to C++17?

I can't reproduce it anymore after updating Seastar (because of #2180)

What is working:

  • Build with two different compilers (gcc 13.2.0 builds Seastar with C++20, Clang 16 builds the app with C++20 and vice versa, Clang 16 builds Seastar with C++20 and gcc 13.2.0 builds the app with C++20)
  • Build with gcc and two different C++ versions (Seastar with C++23, app forced to C++20 via cmake - for both gcc 13.2.0)
  • Build Seastar & app with Clang 16 and C++20

What is NOT working:

  • Build Seastar with Clang 16 and C++23
  • Build with two different compiler and C++ versions (Seastar with gcc 13.2.0 and C++23, app with Clang and C++20)

Seem like Clang 16 has some issues with C++23.

@tchaikov
Copy link
Contributor

@robinchrist
Copy link
Author

robinchrist commented May 19, 2024

we don't support Clang 16.

Yeah that's not a problem. The results I posted above were merely findings with the stuff that is currently on my dev machine and as a reference for others who might run into the same issue, not a "bug report" that Clang 16 is not working 😄

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants