Неопределенные символы для архитектуры Arm64: "_bcrypt_gensaltC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Неопределенные символы для архитектуры Arm64: "_bcrypt_gensalt

Сообщение Anonymous »

Я работаю над проектом cpp и пытаюсь собрать проект с помощью следующей команды в папке сборки
cmake ..
make

и во время связывания я получаю сообщение об ошибке
[ 96%] Linking CXX shared library libsdkrest.dylib
ld: warning: -s is obsolete
ld: warning: -undefined error is deprecated
Undefined symbols for architecture arm64:
"_bcrypt_gensalt", referenced from:
BCrypt::generateSalt() in SDKRESTAPI.cc.o
"_ber_free", referenced from:
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
"_idn2_check_version", referenced from:
_Curl_idn_decode in libcurl.a[68](libcurl_la-idn.o)
_Curl_idnconvert_hostname in libcurl.a[68](libcurl_la-idn.o)
"_idn2_free", referenced from:
_Curl_idn_decode in libcurl.a[68](libcurl_la-idn.o)
_Curl_free_idnconverted_hostname in libcurl.a[68](libcurl_la-idn.o)
"_idn2_lookup_ul", referenced from:
_Curl_idn_decode in libcurl.a[68](libcurl_la-idn.o)
_Curl_idn_decode in libcurl.a[68](libcurl_la-idn.o)
_Curl_idnconvert_hostname in libcurl.a[68](libcurl_la-idn.o)
_Curl_idnconvert_hostname in libcurl.a[68](libcurl_la-idn.o)
"_ldap_err2string", referenced from:
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
"_ldap_first_attribute", referenced from:
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
"_ldap_first_entry", referenced from:
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
"_ldap_free_urldesc", referenced from:
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
"_ldap_get_dn", referenced from:
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
"_ldap_get_values_len", referenced from:
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
"_ldap_init", referenced from:
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
"_ldap_memfree", referenced from:
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
"_ldap_msgfree", referenced from:
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
"_ldap_next_attribute", referenced from:
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
"_ldap_next_entry", referenced from:
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
"_ldap_search_s", referenced from:
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
"_ldap_set_option", referenced from:
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
"_ldap_simple_bind_s", referenced from:
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
"_ldap_unbind_s", referenced from:
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
"_ldap_url_parse", referenced from:
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
"_ldap_value_free_len", referenced from:
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
_ldap_do in libcurl.a[74](libcurl_la-ldap.o)
"_nghttp2_http2_strerror", referenced from:
_http2_handle_stream_close in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_is_fatal", referenced from:
_cf_h2_send in libcurl.a[61](libcurl_la-http2.o)
_h2_session_send in libcurl.a[61](libcurl_la-http2.o)
_h2_session_send in libcurl.a[61](libcurl_la-http2.o)
_on_frame_recv in libcurl.a[61](libcurl_la-http2.o)
_on_frame_recv in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_option_del", referenced from:
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_option_new", referenced from:
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation", referenced from:
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_pack_settings_payload", referenced from:
_Curl_http2_request_upgrade in libcurl.a[61](libcurl_la-http2.o)
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_priority_spec_init", referenced from:
_cf_h2_send in libcurl.a[61](libcurl_la-http2.o)
_h2_session_send in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_callbacks_del", referenced from:
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_callbacks_new", referenced from:
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_callbacks_set_error_callback", referenced from:
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_callbacks_set_on_begin_headers_callback", referenced from:
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_callbacks_set_on_data_chunk_recv_callback", referenced from:
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_callbacks_set_on_frame_recv_callback", referenced from:
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_callbacks_set_on_header_callback", referenced from:
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_callbacks_set_on_stream_close_callback", referenced from:
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_callbacks_set_send_callback", referenced from:
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_check_request_allowed", referenced from:
_cf_h2_query in libcurl.a[61](libcurl_la-http2.o)
_h2_process_pending_input in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_client_new2", referenced from:
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_del", referenced from:
_cf_h2_destroy in libcurl.a[61](libcurl_la-http2.o)
_cf_h2_close in libcurl.a[61](libcurl_la-http2.o)
_http2_cfilter_add in libcurl.a[61](libcurl_la-http2.o)
_Curl_http2_switch_at in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_get_remote_settings", referenced from:
_on_frame_recv in libcurl.a[61](libcurl_la-http2.o)
_on_frame_recv in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_get_remote_window_size", referenced from:
_cf_h2_get_select_socks in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_get_stream_remote_window_size", referenced from:
_cf_h2_get_select_socks in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_get_stream_user_data", referenced from:
_cf_h2_cntrl in libcurl.a[61](libcurl_la-http2.o)
_data_source_read_callback in libcurl.a[61](libcurl_la-http2.o)
_on_frame_recv in libcurl.a[61](libcurl_la-http2.o)
_on_data_chunk_recv in libcurl.a[61](libcurl_la-http2.o)
_on_stream_close in libcurl.a[61](libcurl_la-http2.o)
_on_begin_headers in libcurl.a[61](libcurl_la-http2.o)
_on_header in libcurl.a[61](libcurl_la-http2.o)
...
"_nghttp2_session_mem_recv", referenced from:
_h2_process_pending_input in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_resume_data", referenced from:
_cf_h2_send in libcurl.a[61](libcurl_la-http2.o)
_cf_h2_send in libcurl.a[61](libcurl_la-http2.o)
_cf_h2_cntrl in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_send", referenced from:
_cf_h2_cntrl in libcurl.a[61](libcurl_la-http2.o)
_cf_h2_keep_alive in libcurl.a[61](libcurl_la-http2.o)
_h2_session_send in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_set_local_window_size", referenced from:
_cf_h2_cntrl in libcurl.a[61](libcurl_la-http2.o)
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_set_stream_user_data", referenced from:
_cf_h2_cntrl in libcurl.a[61](libcurl_la-http2.o)
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
_on_frame_recv in libcurl.a[61](libcurl_la-http2.o)
_on_stream_close in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_upgrade2", referenced from:
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_want_read", referenced from:
_cf_h2_send in libcurl.a[61](libcurl_la-http2.o)
_cf_h2_recv in libcurl.a[61](libcurl_la-http2.o)
_h2_process_pending_input in libcurl.a[61](libcurl_la-http2.o)
_should_close_session in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_session_want_write", referenced from:
_cf_h2_get_select_socks in libcurl.a[61](libcurl_la-http2.o)
_cf_h2_send in libcurl.a[61](libcurl_la-http2.o)
_cf_h2_recv in libcurl.a[61](libcurl_la-http2.o)
_cf_h2_cntrl in libcurl.a[61](libcurl_la-http2.o)
_cf_h2_cntrl in libcurl.a[61](libcurl_la-http2.o)
_h2_process_pending_input in libcurl.a[61](libcurl_la-http2.o)
_should_close_session in libcurl.a[61](libcurl_la-http2.o)
...
"_nghttp2_strerror", referenced from:
_cf_h2_cntrl in libcurl.a[61](libcurl_la-http2.o)
_cf_h2_keep_alive in libcurl.a[61](libcurl_la-http2.o)
_cf_h2_keep_alive in libcurl.a[61](libcurl_la-http2.o)
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
_h2_process_pending_input in libcurl.a[61](libcurl_la-http2.o)
...
"_nghttp2_submit_ping", referenced from:
_cf_h2_keep_alive in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_submit_priority", referenced from:
_h2_session_send in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_submit_request", referenced from:
_cf_h2_send in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_submit_rst_stream", referenced from:
_cf_h2_cntrl in libcurl.a[61](libcurl_la-http2.o)
_on_frame_recv in libcurl.a[61](libcurl_la-http2.o)
_on_frame_recv in libcurl.a[61](libcurl_la-http2.o)
_on_header in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_submit_settings", referenced from:
_cf_h2_ctx_init in libcurl.a[61](libcurl_la-http2.o)
"_nghttp2_version", referenced from:
_Curl_http2_ver in libcurl.a[61](libcurl_la-http2.o)
ld: symbol(s) not found for architecture arm64
c++: error: linker command failed with exit code 1 (use -v to see invocation)

Похоже, что ошибка связана с тем, что libcurl не настроен и не собран правильно, но я использовал конфигурацию ниже
ExternalProject_Add(curl
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${CURL_DIR}
INSTALL_DIR ${THIRDPARTY_INSTALL_DIR}
CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/${CURL_DIR}/configure --prefix= --with-openssl --disable-openssl-auto-load-config --without-zlib --disable-ldap --without-nghttp2 --without-brotli --without-librtmp --without-libidn2 --host=arm-apple-darwin23
BUILD_COMMAND make
INSTALL_COMMAND make install)
ExternalProject_Add_Step(curl
fixinstallname
COMMAND ${CMAKE_INSTALL_NAME_TOOL} -id "@rpath/libcurl.4.dylib" /lib/libcurl.4.dylib
DEPENDEES install)
add_dependencies(curl openssl zlib)

Здесь я создаю библиотеку Curl без ldap и http2, но даже после этого выдает связанную с этим ошибку. Пожалуйста, кто-нибудь помогите мне определить проблему.
Редактировать: Подробнее
Из-за комментариев Цыварева я проверил bcrypt lib на наличие проблемы, ссылка на библиотека приведена ниже
https://github.com/trusch/libbcrypt
и я обнаружил, что в нее внесены некоторые изменения lib от предыдущего разработчика, предыдущий разработчик добавил приведенный ниже код в Раздел public: файла Bcrypt.hpp для возможности вызова метода genrateSalt
static std::string generateSalt() {
char salt[BCRYPT_HASHSIZE];
int ret = bcrypt_gensalt(10, salt);
if(ret != 0)throw std::runtime_error{"bcrypt: can not generate salt"};
std::string saltString = salt;
return saltString;
}

и использование конфигурации для сборки libbcrypt
ExternalProject_Add(bcrypt
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${BCRYPT_DIR}
INSTALL_DIR ${THIRDPARTY_INSTALL_DIR}
BUILD_COMMAND make
CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=)

Редактирование 2: код cmake для связывания
target_link_libraries(
sdkrest
base64
utility
${JSONCPP_LIBRARY}
${CURL_LIBRARY}
${OPENSSL_LIBRARIES}
${ZLIB_LIBRARIES}
${DATADOG_LIBRARY}
${LEVELDB_LIBRARY}
${SHAMIR_LIBRARY}
${THRIFT_LIBRARY}
${SDKLO_LIBRARY}
${OPENTRACING_LIBRARY}
Threads::Threads
${CMAKE_DL_LIBS}
)

Я тоже пытался добавить выше
${CRYPT_LIB}
${LDAP_LIB}
${IDN2_LIB}

с приведенным ниже кодом
find_library(CRYPT_LIB crypt)
find_library(LDAP_LIB ldap)
find_library(IDN2_LIB idn2)

# Check if the libraries were found
if(NOT CRYPT_LIB)
message(FATAL_ERROR "libcrypt not found")
endif()
if(NOT LDAP_LIB)
message(FATAL_ERROR "libldap not found")
endif()
if(NOT IDN2_LIB)
message(FATAL_ERROR "libidn2 not found")
endif()

но получаю ошибку
CMake Error at CMakeLists.txt:183 (message):
libcrypt not found


Подробнее здесь: https://stackoverflow.com/questions/792 ... pt-gensalt
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»