【问题标题】:Building mariadb-connector-c on OSX在 OSX 上构建 mariadb-connector-c
【发布时间】:2019-04-01 00:29:57
【问题描述】:

我正在尝试在最新的 OSX 上构建 C connector for MariaDB,但它似乎因与 SSL 相关的错误而失败。我使用 Macports (/opt/local/lib/openssl) 安装了 SSL,并添加了一个指向它的包含:

find_package(OpenSSL REQUIRED)
target_include_directories(tests PRIVATE ${OPENSSL_INCLUDE_DIR})

但构建它会返回相同的错误:

~/chi/databaseclient/cpp/ninja/mariadb-connector-c-src
⟩ ninja
[81/115] Building C object libmariadb/CMakeFiles/mariadb_obj.dir/__/zlib/inflate.c.o
zlib/inflate.c:1475:61: warning: shifting a negative signed value is undefined [-Wshift-negative-value]
    if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16;
                                                        ~~~ ^
1 warning generated.
[89/115] Linking C shared library libmariadb/libmariadb.3.dylib
FAILED: libmariadb/libmariadb.3.dylib 
: && /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -O2 -g -DNDEBUG -DDBUG_OFF -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -dynamiclib -Wl,-headerpad_max_install_names -compatibility_version 3.0.0 -current_version 3.0.0 -o libmariadb/libmariadb.3.dylib -install_name /Users/ruihpacheco/chi/databaseclient/cpp/ninja/mariadb-connector-c-src/libmariadb/libmariadb.3.dylib libmariadb/CMakeFiles/mariadb_obj.dir/__/plugins/auth/my_auth.c.o libmariadb/CMakeFiles/mariadb_obj.dir/__/plugins/auth/old_password.c.o libmariadb/CMakeFiles/mariadb_obj.dir/__/plugins/pvio/pvio_socket.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_array.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_charset.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_hash.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_net.c.o libmariadb/CMakeFiles/mariadb_obj.dir/mariadb_charset.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_time.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_default.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_errmsg.c.o libmariadb/CMakeFiles/mariadb_obj.dir/mariadb_lib.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_list.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_pvio.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_tls.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_alloc.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_compress.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_init.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_password.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_ll2str.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_sha1.c.o libmariadb/CMakeFiles/mariadb_obj.dir/mariadb_stmt.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_loaddata.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_stmt_codec.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_string.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_dtoa.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_client_plugin.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_io.c.o libmariadb/CMakeFiles/mariadb_obj.dir/secure/openssl.c.o libmariadb/CMakeFiles/mariadb_obj.dir/__/zlib/adler32.c.o libmariadb/CMakeFiles/mariadb_obj.dir/__/zlib/compress.c.o libmariadb/CMakeFiles/mariadb_obj.dir/__/zlib/crc32.c.o libmariadb/CMakeFiles/mariadb_obj.dir/__/zlib/deflate.c.o libmariadb/CMakeFiles/mariadb_obj.dir/__/zlib/gzclose.c.o libmariadb/CMakeFiles/mariadb_obj.dir/__/zlib/gzlib.c.o libmariadb/CMakeFiles/mariadb_obj.dir/__/zlib/gzread.c.o libmariadb/CMakeFiles/mariadb_obj.dir/__/zlib/gzwrite.c.o libmariadb/CMakeFiles/mariadb_obj.dir/__/zlib/infback.c.o libmariadb/CMakeFiles/mariadb_obj.dir/__/zlib/inffast.c.o libmariadb/CMakeFiles/mariadb_obj.dir/__/zlib/inflate.c.o libmariadb/CMakeFiles/mariadb_obj.dir/__/zlib/inftrees.c.o libmariadb/CMakeFiles/mariadb_obj.dir/__/zlib/trees.c.o libmariadb/CMakeFiles/mariadb_obj.dir/__/zlib/uncompr.c.o libmariadb/CMakeFiles/mariadb_obj.dir/__/zlib/zutil.c.o libmariadb/CMakeFiles/mariadb_obj.dir/mariadb_dyncol.c.o libmariadb/CMakeFiles/mariadb_obj.dir/mariadb_async.c.o libmariadb/CMakeFiles/mariadb_obj.dir/ma_context.c.o  /usr/lib/libiconv.dylib /usr/lib/libssl.dylib /usr/lib/libcrypto.dylib && :
Undefined symbols for architecture x86_64:
  "_X509_check_host", referenced from:
      _ma_tls_verify_server_cert in openssl.c.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
[91/115] Building C object unittest/libmariadb/CMakeFiles/ps_bugs.dir/ps_bugs.c.o
ninja: build stopped: subcommand failed.

【问题讨论】:

  • 看起来你正在链接系统 ssl: /usr/lib/libssl.dylib 上的链接命令,但听起来你包括一个非系统 ssl 库。所以肯定有可能存在某种不匹配。尝试使用系统 ssl 进行编译和链接,或者使用 brew 安装的,但不要混合使用。
  • 这不是我的,是 MariaDB 的。
  • 抱歉,措辞不好。 s/你是/它是/
  • 关于您添加在链接期间未使用的 macports openSSL 发行版的观点仍然有效。我实际上也不确定它是否被用作包含。取出 macports openssl 的额外包含内容并发布构建错误?

标签: macos mariadb ninja mariadb-connector-c


【解决方案1】:

MariaDB Connector/C 可与所有受支持的 OpenSSL 版本一起正常工作。

错误“架构 x86_64 “_X509_check_host”的未定义符号”表示您使用的是不再支持的旧 OpenSSL 版本。 X509_check_host 是在 OpenSSL 1.0.2 中引入的。

请将您的 OpenSSL 版本更新到 1.0.2 或更高版本。另见https://www.openssl.org/policies/releasestrat.html

【讨论】:

  • 我有 1.0.2:> openssl 版本 OpenSSL 1.0.2q 2018 年 11 月 20 日
【解决方案2】:

出于某种原因,基本上 CMake 使用的是 Macports 头文件而不是系统库。

【讨论】:

    猜你喜欢
    • 2018-04-19
    • 1970-01-01
    • 2019-06-20
    • 2021-10-24
    • 2019-07-27
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多