microsoft / vcpkg

C++ Library Manager for Windows, Linux, and MacOS
MIT License
22.79k stars 6.3k forks source link

[cyrus-sasl,lmdb,librdkafka] cannot link against librdkafka[sasl] #40320

Open timkpaine opened 1 month ago

timkpaine commented 1 month ago

Describe the bug Likely related to our ongoing work with cyrus-sasl, lmdb, and librdkafka. @dg0yt might recognize something obvious 🤞

Environment

To Reproduce Steps to reproduce the behavior:

  1. ./vcpkg install librdkafka[sasl]
  2. Try to link against librdkafka

e.g.

target_link_libraries(mylib PRIVATE RdKafka::rdkafka RdKafka::rdkafka++)

Expected behavior Works

Failure logs

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -fvisibility=hidden         -O3         -g0         -Wall         -Werror         -Wno-deprecated-declarations         -Wno-deprecated          -O3 -DNDEBUG -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.5.sdk -mmacosx-version-min=10.15 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -o lib/_kafkaadapterimpl.so -install_name @rpath/_mycode.so cpp/CMakeFiles/mycode.dir/mycode.cpp.o -L/opt/homebrew/opt/python@3.11/Frameworks/Python.framework/Versions/3.11/lib -Wl,-rpath,@loader_path/ -Wl,-rpath,/opt/homebrew/opt/python@3.11/Frameworks/Python.framework/Versions/3.11/lib  lib/libmycode.a vcpkg_installed/arm64-osx/lib/libprotoc.a  vcpkg_installed/arm64-osx/lib/libprotobuf.a  vcpkg_installed/arm64-osx/lib/libprotobuf-lite.a  vcpkg_installed/arm64-osx/lib/libabsl_log_internal_check_op.a  vcpkg_installed/arm64-osx/lib/libabsl_leak_check.a  vcpkg_installed/arm64-osx/lib/libabsl_die_if_null.a  vcpkg_installed/arm64-osx/lib/libabsl_log_internal_conditions.a  vcpkg_installed/arm64-osx/lib/libabsl_log_internal_message.a  vcpkg_installed/arm64-osx/lib/libabsl_log_internal_nullguard.a  vcpkg_installed/arm64-osx/lib/libabsl_examine_stack.a  vcpkg_installed/arm64-osx/lib/libabsl_log_internal_format.a  vcpkg_installed/arm64-osx/lib/libabsl_log_internal_proto.a  vcpkg_installed/arm64-osx/lib/libabsl_log_internal_log_sink_set.a  vcpkg_installed/arm64-osx/lib/libabsl_log_sink.a  vcpkg_installed/arm64-osx/lib/libabsl_log_entry.a  vcpkg_installed/arm64-osx/lib/libabsl_flags_internal.a  vcpkg_installed/arm64-osx/lib/libabsl_flags_marshalling.a  vcpkg_installed/arm64-osx/lib/libabsl_flags_reflection.a  vcpkg_installed/arm64-osx/lib/libabsl_flags_config.a  vcpkg_installed/arm64-osx/lib/libabsl_flags_program_name.a  vcpkg_installed/arm64-osx/lib/libabsl_flags_private_handle_accessor.a  vcpkg_installed/arm64-osx/lib/libabsl_flags_commandlineflag.a  vcpkg_installed/arm64-osx/lib/libabsl_flags_commandlineflag_internal.a  vcpkg_installed/arm64-osx/lib/libabsl_log_initialize.a  vcpkg_installed/arm64-osx/lib/libabsl_log_globals.a  vcpkg_installed/arm64-osx/lib/libabsl_vlog_config_internal.a  vcpkg_installed/arm64-osx/lib/libabsl_log_internal_fnmatch.a  vcpkg_installed/arm64-osx/lib/libabsl_log_internal_globals.a  vcpkg_installed/arm64-osx/lib/libabsl_raw_hash_set.a  vcpkg_installed/arm64-osx/lib/libabsl_hash.a  vcpkg_installed/arm64-osx/lib/libabsl_city.a  vcpkg_installed/arm64-osx/lib/libabsl_low_level_hash.a  vcpkg_installed/arm64-osx/lib/libabsl_hashtablez_sampler.a  vcpkg_installed/arm64-osx/lib/libabsl_statusor.a  vcpkg_installed/arm64-osx/lib/libabsl_status.a  vcpkg_installed/arm64-osx/lib/libabsl_cord.a  vcpkg_installed/arm64-osx/lib/libabsl_cordz_info.a  vcpkg_installed/arm64-osx/lib/libabsl_cord_internal.a  vcpkg_installed/arm64-osx/lib/libabsl_cordz_functions.a  vcpkg_installed/arm64-osx/lib/libabsl_exponential_biased.a  vcpkg_installed/arm64-osx/lib/libabsl_cordz_handle.a  vcpkg_installed/arm64-osx/lib/libabsl_crc_cord_state.a  vcpkg_installed/arm64-osx/lib/libabsl_crc32c.a  vcpkg_installed/arm64-osx/lib/libabsl_crc_internal.a  vcpkg_installed/arm64-osx/lib/libabsl_crc_cpu_detect.a  vcpkg_installed/arm64-osx/lib/libabsl_bad_optional_access.a  vcpkg_installed/arm64-osx/lib/libabsl_strerror.a  vcpkg_installed/arm64-osx/lib/libabsl_str_format_internal.a  vcpkg_installed/arm64-osx/lib/libabsl_synchronization.a  vcpkg_installed/arm64-osx/lib/libabsl_stacktrace.a  vcpkg_installed/arm64-osx/lib/libabsl_symbolize.a  vcpkg_installed/arm64-osx/lib/libabsl_debugging_internal.a  vcpkg_installed/arm64-osx/lib/libabsl_demangle_internal.a  vcpkg_installed/arm64-osx/lib/libabsl_demangle_rust.a  vcpkg_installed/arm64-osx/lib/libabsl_decode_rust_punycode.a  vcpkg_installed/arm64-osx/lib/libabsl_utf8_for_code_point.a  vcpkg_installed/arm64-osx/lib/libabsl_graphcycles_internal.a  vcpkg_installed/arm64-osx/lib/libabsl_kernel_timeout_internal.a  vcpkg_installed/arm64-osx/lib/libabsl_malloc_internal.a  vcpkg_installed/arm64-osx/lib/libabsl_time.a  vcpkg_installed/arm64-osx/lib/libabsl_civil_time.a  vcpkg_installed/arm64-osx/lib/libabsl_time_zone.a  -Wl,-framework,CoreFoundation  vcpkg_installed/arm64-osx/lib/libabsl_bad_variant_access.a  vcpkg_installed/arm64-osx/lib/libutf8_validity.a  vcpkg_installed/arm64-osx/lib/libabsl_strings.a  vcpkg_installed/arm64-osx/lib/libabsl_int128.a  vcpkg_installed/arm64-osx/lib/libabsl_strings_internal.a  vcpkg_installed/arm64-osx/lib/libabsl_string_view.a  vcpkg_installed/arm64-osx/lib/libabsl_base.a  vcpkg_installed/arm64-osx/lib/libabsl_spinlock_wait.a  vcpkg_installed/arm64-osx/lib/libabsl_throw_delegate.a  vcpkg_installed/arm64-osx/lib/libabsl_raw_logging_internal.a  vcpkg_installed/arm64-osx/lib/libabsl_log_severity.a  vcpkg_installed/arm64-osx/lib/librdkafka++.a  vcpkg_installed/arm64-osx/lib/librdkafka.a  -lm  vcpkg_installed/arm64-osx/lib/libssl.a  vcpkg_installed/arm64-osx/lib/libcrypto.a  -lsasl2  -llmdb  -lpthread  -lresolv  -lcrypto  -lgssapi_krb5  -lkrb5  -lk5crypto  -lcom_err  -lkrb5support  -lpthread  -lresolv  -lcrypto  -lgssapi_krb5  -lkrb5  -lk5crypto  -lcom_err  -lkrb5support  -ldl  -framework Kerberos  vcpkg_installed/arm64-osx/lib/liblz4.a  vcpkg_installed/arm64-osx/lib/liblmdb.a && :
ld: warning: ignoring duplicate libraries: '-lcom_err', '-lcrypto', '-lgssapi_krb5', '-lk5crypto', '-lkrb5', '-lkrb5support', '-lpthread', '-lresolv'
ld: library 'lmdb' not found

Note the end of that long string:

-llmdb  -lpthread ... vcpkg_installed/arm64-osx/lib/liblz4.a  vcpkg_installed/arm64-osx/lib/liblmdb.a 

Seems mixing the wrong things? trying to use shared?

Additional context A workaround appears to be statically enumerating the libs

    target_link_libraries(mylib PRIVATE
      ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/liblmdb.a
      ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/libkrb5.a
      ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/libkrb5support.a
      ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/libkrb5support.a
      ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/libkrb5_klmdb.a
      ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/libk5crypto.a
      ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/libgssapi_krb5.a
      ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/liblz4.a
      ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/libsasl2.a
      ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/librdkafka.a
      ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/librdkafka++.a
    )
dg0yt commented 1 month ago

The warning for duplicate libs is typical of Apple's linker. The -llmdb error is because there is no -Lvcpkg_installed/arm64-osx/lib to help guide the search. The task is to find where the -l without -L comes from.

timkpaine commented 1 month ago

so that suggests that another viable temporary workaround is in e.g. cmake,

link_directories(${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib)
target_link_libraries(mylib PRIVATE RdKafka::rdkafka RdKafka::rdkafka++)
dg0yt commented 1 month ago

Workaround, yes. It really needs to be fixed at the root, or it will hit other uses.