Skip to content

Static linking GameNetworkingSockets using vcpkg/CMake dynamically links to OS abseil libraries #421

Description

@jclc

I'm trying to statically link the dependencies to my project using vcpkg but for some reason when linking target_link_libraries(main PRIVATE GameNetworkingSockets::static) it ends up linking with the OS absl shared objects:

$ ldd build/main
        linux-vdso.so.1 (0x00007f825ddca000)
        libprotobuf.so.35.1.0 => /usr/lib/libprotobuf.so.35.1.0 (0x00007f825d000000)
        libutf8_validity.so.35.1.0 => /usr/lib/libutf8_validity.so.35.1.0 (0x00007f825dd8c000)
        libcrypto.so.3 => /usr/lib/libcrypto.so.3 (0x00007f825c800000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f825c400000)
        libm.so.6 => /usr/lib/libm.so.6 (0x00007f825dc85000)
        libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f825dc50000)
        libc.so.6 => /usr/lib/libc.so.6 (0x00007f825c000000)
        /lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f825ddcc000)
        libz.so.1 => /usr/lib/libz.so.1 (0x00007f825d5c4000)
        libabsl_die_if_null.so.2605.0.0 => /usr/lib/libabsl_die_if_null.so.2605.0.0 (0x00007f825dc49000)
        libabsl_statusor.so.2605.0.0 => /usr/lib/libabsl_statusor.so.2605.0.0 (0x00007f825d5be000)
        libabsl_log_internal_check_op.so.2605.0.0 => /usr/lib/libabsl_log_internal_check_op.so.2605.0.0 (0x00007f825d5b4000)
        libabsl_log_internal_conditions.so.2605.0.0 => /usr/lib/libabsl_log_internal_conditions.so.2605.0.0 (0x00007f825d5af000)
        libabsl_log_internal_message.so.2605.0.0 => /usr/lib/libabsl_log_internal_message.so.2605.0.0 (0x00007f825d5a0000)
        libabsl_log_internal_nullguard.so.2605.0.0 => /usr/lib/libabsl_log_internal_nullguard.so.2605.0.0 (0x00007f825d59b000)
        libabsl_raw_hash_set.so.2605.0.0 => /usr/lib/libabsl_raw_hash_set.so.2605.0.0 (0x00007f825d592000)
        libabsl_status.so.2605.0.0 => /usr/lib/libabsl_status.so.2605.0.0 (0x00007f825d586000)
        libabsl_cord.so.2605.0.0 => /usr/lib/libabsl_cord.so.2605.0.0 (0x00007f825d56d000)
        libabsl_cordz_info.so.2605.0.0 => /usr/lib/libabsl_cordz_info.so.2605.0.0 (0x00007f825d564000)
        libabsl_cord_internal.so.2605.0.0 => /usr/lib/libabsl_cord_internal.so.2605.0.0 (0x00007f825d556000)
        libabsl_hash.so.2605.0.0 => /usr/lib/libabsl_hash.so.2605.0.0 (0x00007f825d551000)
        libabsl_synchronization.so.2605.0.0 => /usr/lib/libabsl_synchronization.so.2605.0.0 (0x00007f825d53f000)
        libabsl_time.so.2605.0.0 => /usr/lib/libabsl_time.so.2605.0.0 (0x00007f825d52b000)
        libabsl_time_zone.so.2605.0.0 => /usr/lib/libabsl_time_zone.so.2605.0.0 (0x00007f825cfe5000)
        libabsl_str_format_internal.so.2605.0.0 => /usr/lib/libabsl_str_format_internal.so.2605.0.0 (0x00007f825cfc6000)
        libabsl_strings.so.2605.0.0 => /usr/lib/libabsl_strings.so.2605.0.0 (0x00007f825cfa0000)
        libabsl_spinlock_wait.so.2605.0.0 => /usr/lib/libabsl_spinlock_wait.so.2605.0.0 (0x00007f825d524000)
        libabsl_throw_delegate.so.2605.0.0 => /usr/lib/libabsl_throw_delegate.so.2605.0.0 (0x00007f825cf9a000)
        libabsl_raw_logging_internal.so.2605.0.0 => /usr/lib/libabsl_raw_logging_internal.so.2605.0.0 (0x00007f825d51f000)
        libbrotlienc.so.1 => /usr/lib/libbrotlienc.so.1 (0x00007f825c306000)
        libbrotlidec.so.1 => /usr/lib/libbrotlidec.so.1 (0x00007f825cf88000)
        libzstd.so.1 => /usr/lib/libzstd.so.1 (0x00007f825be9f000)
        libabsl_base.so.2605.0.0 => /usr/lib/libabsl_base.so.2605.0.0 (0x00007f825cf82000)
        libabsl_leak_check.so.2605.0.0 => /usr/lib/libabsl_leak_check.so.2605.0.0 (0x00007f825cf7d000)
        libabsl_examine_stack.so.2605.0.0 => /usr/lib/libabsl_examine_stack.so.2605.0.0 (0x00007f825cf76000)
        libabsl_log_internal_format.so.2605.0.0 => /usr/lib/libabsl_log_internal_format.so.2605.0.0 (0x00007f825cf71000)
        libabsl_log_internal_structured_proto.so.2605.0.0 => /usr/lib/libabsl_log_internal_structured_proto.so.2605.0.0 (0x00007f825cf6c000)
        libabsl_strerror.so.2605.0.0 => /usr/lib/libabsl_strerror.so.2605.0.0 (0x00007f825cf67000)
        libabsl_log_internal_log_sink_set.so.2605.0.0 => /usr/lib/libabsl_log_internal_log_sink_set.so.2605.0.0 (0x00007f825cf61000)
        libabsl_log_internal_globals.so.2605.0.0 => /usr/lib/libabsl_log_internal_globals.so.2605.0.0 (0x00007f825cf5a000)
        libabsl_log_globals.so.2605.0.0 => /usr/lib/libabsl_log_globals.so.2605.0.0 (0x00007f825cf54000)
        libabsl_log_internal_proto.so.2605.0.0 => /usr/lib/libabsl_log_internal_proto.so.2605.0.0 (0x00007f825cf4f000)
        libabsl_strings_internal.so.2605.0.0 => /usr/lib/libabsl_strings_internal.so.2605.0.0 (0x00007f825cf49000)
        libabsl_hashtablez_sampler.so.2605.0.0 => /usr/lib/libabsl_hashtablez_sampler.so.2605.0.0 (0x00007f825cf43000)
        libabsl_crc_cord_state.so.2605.0.0 => /usr/lib/libabsl_crc_cord_state.so.2605.0.0 (0x00007f825cf3a000)
        libabsl_cordz_functions.so.2605.0.0 => /usr/lib/libabsl_cordz_functions.so.2605.0.0 (0x00007f825cf35000)
        libabsl_cordz_handle.so.2605.0.0 => /usr/lib/libabsl_cordz_handle.so.2605.0.0 (0x00007f825cf30000)
        libabsl_stacktrace.so.2605.0.0 => /usr/lib/libabsl_stacktrace.so.2605.0.0 (0x00007f825cf2b000)
        libabsl_city.so.2605.0.0 => /usr/lib/libabsl_city.so.2605.0.0 (0x00007f825cf26000)
        libabsl_kernel_timeout_internal.so.2605.0.0 => /usr/lib/libabsl_kernel_timeout_internal.so.2605.0.0 (0x00007f825cf1f000)
        libabsl_tracing_internal.so.2605.0.0 => /usr/lib/libabsl_tracing_internal.so.2605.0.0 (0x00007f825cf1a000)
        libabsl_malloc_internal.so.2605.0.0 => /usr/lib/libabsl_malloc_internal.so.2605.0.0 (0x00007f825cf13000)
        libabsl_int128.so.2605.0.0 => /usr/lib/libabsl_int128.so.2605.0.0 (0x00007f825cf0b000)
        libbrotlicommon.so.1 => /usr/lib/libbrotlicommon.so.1 (0x00007f825cee8000)
        libabsl_symbolize.so.2605.0.0 => /usr/lib/libabsl_symbolize.so.2605.0.0 (0x00007f825cede000)
        libabsl_log_sink.so.2605.0.0 => /usr/lib/libabsl_log_sink.so.2605.0.0 (0x00007f825ced9000)
        libabsl_crc32c.so.2605.0.0 => /usr/lib/libabsl_crc32c.so.2605.0.0 (0x00007f825ced2000)
        libabsl_exponential_biased.so.2605.0.0 => /usr/lib/libabsl_exponential_biased.so.2605.0.0 (0x00007f825cecd000)
        libabsl_debugging_internal.so.2605.0.0 => /usr/lib/libabsl_debugging_internal.so.2605.0.0 (0x00007f825cec4000)
        libabsl_demangle_internal.so.2605.0.0 => /usr/lib/libabsl_demangle_internal.so.2605.0.0 (0x00007f825ceb7000)
        libabsl_crc_internal.so.2605.0.0 => /usr/lib/libabsl_crc_internal.so.2605.0.0 (0x00007f825cead000)
        libabsl_crc_cpu_detect.so.2605.0.0 => /usr/lib/libabsl_crc_cpu_detect.so.2605.0.0 (0x00007f825cea8000)
        libabsl_demangle_rust.so.2605.0.0 => /usr/lib/libabsl_demangle_rust.so.2605.0.0 (0x00007f825cea0000)
        libabsl_decode_rust_punycode.so.2605.0.0 => /usr/lib/libabsl_decode_rust_punycode.so.2605.0.0 (0x00007f825c7f9000)
        libabsl_utf8_for_code_point.so.2605.0.0 => /usr/lib/libabsl_utf8_for_code_point.so.2605.0.0 (0x00007f825c7f4000)

For the record I am also including abseil for some container types in my project, but if I remove GameNetworkingSockets abseil is statically linked. Even when I link protobuf::libprotobuf directly I don't have the same issue, this only seems to happen when using the GNS vcpkg package.

CMakeLists.txt:

// project ...
set(CMAKE_CXX_STANDARD 23)

find_package(Stb REQUIRED)
find_package(fmt REQUIRED)
find_package(glm REQUIRED)
find_package(spdlog REQUIRED)
find_package(imgui REQUIRED)
find_package(absl REQUIRED)
find_package(flatbuffers REQUIRED)
find_package(SDL3 REQUIRED)
find_package(GameNetworkingSockets REQUIRED)
find_package(EnTT REQUIRED)

// add_executable ...

target_link_libraries(main PRIVATE Threads::Threads)
target_link_libraries(main PRIVATE fmt::fmt)
target_link_libraries(main PRIVATE SDL3::SDL3)
target_link_libraries(main PRIVATE absl::flat_hash_map)
target_link_libraries(main PRIVATE flatbuffers::flatbuffers)
target_link_libraries(main PRIVATE glm::glm)
target_link_libraries(main PRIVATE imgui::imgui)
target_link_libraries(main PRIVATE spdlog::spdlog)
target_link_libraries(main PRIVATE GameNetworkingSockets::static)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions