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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions