Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

diesel link order issues sometimes break build #69

Open
chrisabruce opened this issue Mar 19, 2019 · 19 comments
Open

diesel link order issues sometimes break build #69

chrisabruce opened this issue Mar 19, 2019 · 19 comments
Labels

Comments

@chrisabruce
Copy link

Trying to build with the using-diesel example fails. Here is snippet of error:

error: linking with `cc` failed: exit code: 1
  |
  = note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-Wl,--eh-frame-hdr" "-m64" "-nostdlib" "/home/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/crt1.o" "/home/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/crti.o" "-L" "/home/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/using_diesel-94aa5cadffcea30e.using_diesel.dqcexic7-cgu.0.rcgu.o" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/using_diesel-94aa5cadffcea30e.using_diesel.dqcexic7-cgu.1.rcgu.o" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/using_diesel-94aa5cadffcea30e.using_diesel.dqcexic7-cgu.10.rcgu.o" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/using_diesel-94aa5cadffcea30e.using_diesel.dqcexic7-cgu.11.rcgu.o" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/using_diesel-94aa5cadffcea30e.using_diesel.dqcexic7-cgu.12.rcgu.o" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/using_diesel-94aa5cadffcea30e.using_diesel.dqcexic7-cgu.13.rcgu.o" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/using_diesel-94aa5cadffcea30e.using_diesel.dqcexic7-cgu.14.rcgu.o" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/using_diesel-94aa5cadffcea30e.using_diesel.dqcexic7-cgu.15.rcgu.o" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/using_diesel-94aa5cadffcea30e.using_diesel.dqcexic7-cgu.2.rcgu.o" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/using_diesel-94aa5cadffcea30e.using_diesel.dqcexic7-cgu.3.rcgu.o" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/using_diesel-94aa5cadffcea30e.using_diesel.dqcexic7-cgu.4.rcgu.o" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/using_diesel-94aa5cadffcea30e.using_diesel.dqcexic7-cgu.5.rcgu.o" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/using_diesel-94aa5cadffcea30e.using_diesel.dqcexic7-cgu.6.rcgu.o" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/using_diesel-94aa5cadffcea30e.using_diesel.dqcexic7-cgu.7.rcgu.o" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/using_diesel-94aa5cadffcea30e.using_diesel.dqcexic7-cgu.8.rcgu.o" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/using_diesel-94aa5cadffcea30e.using_diesel.dqcexic7-cgu.9.rcgu.o" "-o" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/using_diesel-94aa5cadffcea30e" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/using_diesel-94aa5cadffcea30e.3n7t9phqceru8m8i.rcgu.o" "-Wl,--gc-sections" "-no-pie" "-Wl,-zrelro" "-Wl,-znow" "-Wl,-O1" "-nodefaultlibs" "-L" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps" "-L" "/home/rust/src/target/release/deps" "-L" "/home/rust/src/target/x86_64-unknown-linux-musl/release/build/libsqlite3-sys-ac3cf7454f406832/out" "-L" "/usr/local/musl/lib" "-L" "/usr/local/musl/lib/" "-L" "/home/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib" "-Wl,-Bstatic" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/libopenssl-0de50740ee181784.rlib" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/libopenssl_sys-89c6410693b927d6.rlib" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/liblibc-6265db6daf6f0d94.rlib" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/liblazy_static-5cac84b776fcd98b.rlib" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/libforeign_types-23f459ebafab2c61.rlib" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/libforeign_types_shared-1eba4aeaa81c6d19.rlib" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/libdiesel-c89a5a6bebad19a9.rlib" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/liblibsqlite3_sys-818909750b3afa36.rlib" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/libpq_sys-dc85b10baeb00fc3.rlib" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/libbyteorder-9272cb6794a9382c.rlib" "/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/libbitflags-b8224b03590c6c21.rlib" "/home/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libstd-af9362ed5d81a840.rlib" "/home/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libpanic_unwind-4d55a38564aae54a.rlib" "/home/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libbacktrace_sys-f8521075e248b627.rlib" "/home/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libunwind-7c91ffdc8da860d3.rlib" "/home/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/librustc_demangle-0ad27b9879d551d3.rlib" "/home/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/liblibc-588f18eae3ea58be.rlib" "/home/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/liballoc-4ebf5caee903d98f.rlib" "/home/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/librustc_std_workspace_core-8895b32baedb08c6.rlib" "/home/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libcore-6a9d233d01acc350.rlib" "/home/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/libcompiler_builtins-851bb3b5f6c4db49.rlib" "-Wl,-Bdynamic" "-lpq" "-static" "/home/rust/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-musl/lib/crtn.o"
  = note: /usr/local/musl/lib/libpq.a(fe-connect.o): In function `connectFailureMessage':
          fe-connect.c:(.text+0xa12): undefined reference to `strlcpy'
          /usr/local/musl/lib/libpq.a(fe-connect.o): In function `internal_cancel':
          fe-connect.c:(.text+0xca9): undefined reference to `htonl'
          fe-connect.c:(.text+0xcb7): undefined reference to `htonl'
          fe-connect.c:(.text+0xcc4): undefined reference to `htonl'
          fe-connect.c:(.text+0xcd1): undefined reference to `htonl'
          fe-connect.c:(.text+0xd6e): undefined reference to `strlcpy'
          fe-connect.c:(.text+0xd9e): undefined reference to `strncat'
          fe-connect.c:(.text+0xdde): undefined reference to `strlcpy'
          fe-connect.c:(.text+0xdfa): undefined reference to `strlcpy'
          fe-connect.c:(.text+0xe26): undefined reference to `strncat'
          /usr/local/musl/lib/libpq.a(fe-connect.o): In function `PQcancel':
          fe-connect.c:(.text+0x1462): undefined reference to `strlcpy'
          /usr/local/musl/lib/libpq.a(fe-connect.o): In function `PQrequestCancel':
          fe-connect.c:(.text+0x14f0): undefined reference to `strlcpy'
          /usr/local/musl/lib/libpq.a(fe-connect.o): In function `PQsetClientEncoding':
          fe-connect.c:(.text+0x1a71): undefined reference to `sprintf'
          /usr/local/musl/lib/libpq.a(fe-connect.o): In function `pqGetHomeDirectory':
          fe-connect.c:(.text+0x1c81): undefined reference to `strlcpy'
          /usr/local/musl/lib/libpq.a(fe-connect.o): In function `parseServiceInfo':
          fe-connect.c:(.text+0x1d1e): undefined reference to `strlcpy'
          /usr/local/musl/lib/libpq.a(fe-connect.o): In function `getPgPassFilename':
          fe-connect.c:(.text+0x2c11): undefined reference to `strlcpy'
          /usr/local/musl/lib/libpq.a(fe-connect.o): In function `PasswordFromFile':
          fe-connect.c:(.text+0x2d1c): undefined reference to `feof'
          /usr/local/musl/lib/libpq.a(fe-connect.o): In function `PQconnectPoll':
          fe-connect.c:(.text+0x3969): undefined reference to `htonl'
          /usr/local/musl/lib/libpq.a(fe-connect.o): In function `defaultNoticeProcessor':
          fe-connect.c:(.text+0xee): undefined reference to `fputs'
          /usr/local/musl/lib/libpq.a(fe-exec.o): In function `pqInternalNotice':
          fe-exec.c:(.text+0x1256): undefined reference to `sprintf'
          /usr/local/musl/lib/libpq.a(fe-exec.o): In function `pqSaveParameterStatus':
          fe-exec.c:(.text+0x1964): undefined reference to `sscanf'
          /usr/local/musl/lib/libpq.a(fe-exec.o): In function `PQoidStatus':
          fe-exec.c:(.text+0x3a11): undefined reference to `strspn'
          /usr/local/musl/lib/libpq.a(fe-misc.o): In function `pqGetnchar':
          fe-misc.c:(.text+0x3ac): undefined reference to `fputc'
          fe-misc.c:(.text+0x3c6): undefined reference to `fputc'
          /usr/local/musl/lib/libpq.a(fe-misc.o): In function `pqSkipnchar':
          fe-misc.c:(.text+0x454): undefined reference to `fputc'
          fe-misc.c:(.text+0x46f): undefined reference to `fputc'
          /usr/local/musl/lib/libpq.a(fe-misc.o): In function `pqGetInt':
          fe-misc.c:(.text+0x4ec): undefined reference to `ntohl'
          fe-misc.c:(.text+0x58a): undefined reference to `ntohs'
          /usr/local/musl/lib/libpq.a(fe-misc.o): In function `pqPutnchar':
          fe-misc.c:(.text+0x7dc): undefined reference to `fputc'
          fe-misc.c:(.text+0x7f6): undefined reference to `fputc'
          /usr/local/musl/lib/libpq.a(fe-misc.o): In function `pqPutInt':
          fe-misc.c:(.text+0x881): undefined reference to `htonl'
          /usr/local/musl/lib/libpq.a(fe-misc.o): In function `pqPutMsgEnd':
          fe-misc.c:(.text+0xf9d): undefined reference to `htonl'
          /usr/local/musl/lib/libpq.a(fe-protocol2.o): In function `pqSetenvPoll':
          fe-protocol2.c:(.text+0xa59): undefined reference to `sprintf'
          fe-protocol2.c:(.text+0xb90): undefined reference to `sprintf'
          fe-protocol2.c:(.text+0xbb0): undefined reference to `sprintf'
          /usr/local/musl/lib/libpq.a(fe-protocol2.o): In function `pqParseInput2':
          fe-protocol2.c:(.text+0xde8): undefined reference to `strlcpy'
          /usr/local/musl/lib/libpq.a(fe-protocol2.o): In function `pqBuildStartupPacket2':
          fe-protocol2.c:(.text+0x1bad): undefined reference to `htonl'
          /usr/local/musl/lib/libpq.a(fe-protocol3.o): In function `build_startup_packet':
          fe-protocol3.c:(.text+0x4b3): undefined reference to `htonl'
          /usr/local/musl/lib/libpq.a(fe-protocol3.o): In function `pqGetErrorNotice3':
          fe-protocol3.c:(.text+0x11f7): undefined reference to `strlcpy'
          /usr/local/musl/lib/libpq.a(fe-protocol3.o): In function `pqParseInput3':
          fe-protocol3.c:(.text+0x19a8): undefined reference to `strlcpy'
          /usr/local/musl/lib/libpq.a(fe-secure.o): In function `pq_block_sigpipe':
          fe-secure.c:(.text+0x19c): undefined reference to `sigaddset'
          fe-secure.c:(.text+0x1c6): undefined reference to `sigismember'
          fe-secure.c:(.text+0x20c): undefined reference to `sigpending'
          fe-secure.c:(.text+0x21f): undefined reference to `sigismember'
          /usr/local/musl/lib/libpq.a(fe-secure.o): In function `pq_reset_sigpipe':
          fe-secure.c:(.text+0x288): undefined reference to `sigpending'
          fe-secure.c:(.text+0x2d1): undefined reference to `sigismember'
          fe-secure.c:(.text+0x2f2): undefined reference to `sigaddset'
          fe-secure.c:(.text+0x2ff): undefined reference to `sigwait'
          /usr/local/musl/lib/libpq.a(chklocale.o): In function `pg_get_encoding_from_locale':
          chklocale.c:(.text+0x50): undefined reference to `setlocale'
          chklocale.c:(.text+0x77): undefined reference to `setlocale'
          chklocale.c:(.text+0x8a): undefined reference to `nl_langinfo'
          chklocale.c:(.text+0xa7): undefined reference to `setlocale'
          chklocale.c:(.text+0x115): undefined reference to `setlocale'
          chklocale.c:(.text+0x159): undefined reference to `nl_langinfo'
          chklocale.c:(.text+0x1ba): undefined reference to `fputc'
          /usr/local/musl/lib/libpq.a(inet_net_ntop.o): In function `inet_net_ntop':
          inet_net_ntop.c:(.text+0xd3): undefined reference to `sprintf'
          inet_net_ntop.c:(.text+0x10b): undefined reference to `sprintf'
          inet_net_ntop.c:(.text+0x324): undefined reference to `sprintf'
          inet_net_ntop.c:(.text+0x3c4): undefined reference to `sprintf'
          inet_net_ntop.c:(.text+0x41b): undefined reference to `sprintf'
          /usr/local/musl/lib/libpq.a(ip.o): In function `pg_getnameinfo_all':
          ip.c:(.text+0x281): undefined reference to `getnameinfo'
          ip.c:(.text+0x2a7): undefined reference to `strlcpy'
          ip.c:(.text+0x2be): undefined reference to `strlcpy'
          /usr/local/musl/lib/libpq.a(ip.o): In function `pg_sockaddr_cidr_mask':
          ip.c:(.text+0x46f): undefined reference to `htonl'
          /usr/local/musl/lib/libpq.a(ip.o): In function `pg_foreach_ifaddr':
          ip.c:(.text+0x5ce): undefined reference to `getifaddrs'
          ip.c:(.text+0x65e): undefined reference to `freeifaddrs'
          /usr/local/musl/lib/libpq.a(fe-secure-openssl.o): In function `SSLerrmessage':
          fe-secure-openssl.c:(.text+0x38): undefined reference to `ERR_reason_error_string'
          fe-secure-openssl.c:(.text+0x4d): undefined reference to `strlcpy'
          /usr/local/musl/lib/libpq.a(fe-secure-openssl.o): In function `initialize_SSL':
          fe-secure-openssl.c:(.text+0x122): undefined reference to `SSLv23_method'
          fe-secure-openssl.c:(.text+0x12a): undefined reference to `SSL_CTX_new'
          fe-secure-openssl.c:(.text+0x14a): undefined reference to `SSL_CTX_ctrl'
          fe-secure-openssl.c:(.text+0x15e): undefined reference to `SSL_CTX_ctrl'
          fe-secure-openssl.c:(.text+0x1c8): undefined reference to `SSL_new'
          fe-secure-openssl.c:(.text+0x1e5): undefined reference to `SSL_set_ex_data'
          fe-secure-openssl.c:(.text+0x209): undefined reference to `BIO_new'
          fe-secure-openssl.c:(.text+0x22d): undefined reference to `SSL_set_bio'
          fe-secure-openssl.c:(.text+0x244): undefined reference to `BIO_int_ctrl'
          fe-secure-openssl.c:(.text+0x253): undefined reference to `SSL_CTX_free'
          fe-secure-openssl.c:(.text+0x2bc): undefined reference to `ENGINE_by_id'
          fe-secure-openssl.c:(.text+0x2d4): undefined reference to `ENGINE_init'
          fe-secure-openssl.c:(.text+0x2ef): undefined reference to `ENGINE_load_private_key'
          fe-secure-openssl.c:(.text+0x307): undefined reference to `SSL_use_PrivateKey'
          fe-secure-openssl.c:(.text+0x405): undefined reference to `ERR_put_error'
          fe-secure-openssl.c:(.text+0x40a): undefined reference to `ERR_get_error'
          fe-secure-openssl.c:(.text+0x44e): undefined reference to `SSL_CTX_free'
          fe-secure-openssl.c:(.text+0x471): undefined reference to `strlcpy'
          fe-secure-openssl.c:(.text+0x4e9): undefined reference to `strlcpy'
          fe-secure-openssl.c:(.text+0x5b1): undefined reference to `SSL_check_private_key'
          fe-secure-openssl.c:(.text+0x5bf): undefined reference to `ERR_get_error'
          fe-secure-openssl.c:(.text+0x619): undefined reference to `SSL_CTX_load_verify_locations'
          fe-secure-openssl.c:(.text+0x62a): undefined reference to `SSL_CTX_get_cert_store'
          fe-secure-openssl.c:(.text+0x661): undefined reference to `ERR_clear_error'
          fe-secure-openssl.c:(.text+0x6a9): undefined reference to `ERR_get_error'
          fe-secure-openssl.c:(.text+0x6fc): undefined reference to `SSL_set_verify'
          fe-secure-openssl.c:(.text+0x715): undefined reference to `SSL_CTX_use_certificate_chain_file'
          fe-secure-openssl.c:(.text+0x723): undefined reference to `ERR_get_error'
          fe-secure-openssl.c:(.text+0x7b4): undefined reference to `SSL_ctrl'
          fe-secure-openssl.c:(.text+0x834): undefined reference to `SSL_use_PrivateKey_file'
          fe-secure-openssl.c:(.text+0x842): undefined reference to `ERR_get_error'
          fe-secure-openssl.c:(.text+0x8a1): undefined reference to `BIO_s_socket'
          fe-secure-openssl.c:(.text+0x954): undefined reference to `strlcpy'
          fe-secure-openssl.c:(.text+0x969): undefined reference to `strlcpy'
          fe-secure-openssl.c:(.text+0x984): undefined reference to `X509_STORE_load_locations'
          fe-secure-openssl.c:(.text+0x99a): undefined reference to `X509_STORE_set_flags'
          fe-secure-openssl.c:(.text+0x9d1): undefined reference to `ERR_get_error'
          fe-secure-openssl.c:(.text+0xa1a): undefined reference to `ENGINE_finish'
          fe-secure-openssl.c:(.text+0xa26): undefined reference to `ENGINE_free'
          fe-secure-openssl.c:(.text+0xa75): undefined reference to `ERR_get_error'
          fe-secure-openssl.c:(.text+0xa9e): undefined reference to `ERR_get_error'
          fe-secure-openssl.c:(.text+0xb08): undefined reference to `ERR_get_error'
          fe-secure-openssl.c:(.text+0xb6d): undefined reference to `ERR_get_error'
          /usr/local/musl/lib/libpq.a(fe-secure-openssl.o): In function `verify_peer_name_matches_certificate_name':
          fe-secure-openssl.c:(.text+0xbc5): undefined reference to `ASN1_STRING_data'
          fe-secure-openssl.c:(.text+0xbd0): undefined reference to `ASN1_STRING_length'
          /usr/local/musl/lib/libpq.a(fe-secure-openssl.o): In function `my_sock_write':
          fe-secure-openssl.c:(.text+0xdb1): undefined reference to `BIO_clear_flags'
          fe-secure-openssl.c:(.text+0xde2): undefined reference to `BIO_set_flags'
          /usr/local/musl/lib/libpq.a(fe-secure-openssl.o): In function `my_sock_read':
          fe-secure-openssl.c:(.text+0xe11): undefined reference to `BIO_clear_flags'
          fe-secure-openssl.c:(.text+0xe42): undefined reference to `BIO_set_flags'
          /usr/local/musl/lib/libpq.a(fe-secure-openssl.o): In function `pgtls_read_pending':
          fe-secure-openssl.c:(.text+0xeec): undefined reference to `SSL_pending'
          /usr/local/musl/lib/libpq.a(fe-secure-openssl.o): In function `pgtls_read':
          fe-secure-openssl.c:(.text+0xf4a): undefined reference to `ERR_clear_error'
          fe-secure-openssl.c:(.text+0xf5d): undefined reference to `SSL_read'
          fe-secure-openssl.c:(.text+0xf6e): undefined reference to `SSL_get_error'
          fe-secure-openssl.c:(.text+0xfa1): undefined reference to `ERR_get_error'
          /usr/local/musl/lib/libpq.a(fe-secure-openssl.o): In function `pgtls_write':
          fe-secure-openssl.c:(.text+0x11b8): undefined reference to `ERR_clear_error'
          fe-secure-openssl.c:(.text+0x11ca): undefined reference to `SSL_write'
          fe-secure-openssl.c:(.text+0x11db): undefined reference to `SSL_get_error'
          fe-secure-openssl.c:(.text+0x1211): undefined reference to `ERR_get_error'
          /usr/local/musl/lib/libpq.a(fe-secure-openssl.o): In function `pgtls_init':
          fe-secure-openssl.c:(.text+0x1461): undefined reference to `CRYPTO_get_id_callback'
          fe-secure-openssl.c:(.text+0x146f): undefined reference to `CRYPTO_get_locking_callback'
          fe-secure-openssl.c:(.text+0x1480): undefined reference to `CRYPTO_set_locking_callback'
          fe-secure-openssl.c:(.text+0x1493): undefined reference to `OPENSSL_config'
          fe-secure-openssl.c:(.text+0x1498): undefined reference to `SSL_library_init'
          fe-secure-openssl.c:(.text+0x149d): undefined reference to `SSL_load_error_strings'
          fe-secure-openssl.c:(.text+0x14b1): undefined reference to `CRYPTO_num_locks'
          fe-secure-openssl.c:(.text+0x14dc): undefined reference to `CRYPTO_num_locks'
          fe-secure-openssl.c:(.text+0x153a): undefined reference to `CRYPTO_set_id_callback'
          /usr/local/musl/lib/libpq.a(fe-secure-openssl.o): In function `pgtls_close':
          fe-secure-openssl.c:(.text+0x1568): undefined reference to `SSL_shutdown'
          fe-secure-openssl.c:(.text+0x1579): undefined reference to `SSL_free'
          fe-secure-openssl.c:(.text+0x159c): undefined reference to `X509_free'
          fe-secure-openssl.c:(.text+0x15b8): undefined reference to `ENGINE_finish'
          fe-secure-openssl.c:(.text+0x15c4): undefined reference to `ENGINE_free'
          fe-secure-openssl.c:(.text+0x1631): undefined reference to `CRYPTO_get_locking_callback'
          fe-secure-openssl.c:(.text+0x1642): undefined reference to `CRYPTO_get_id_callback'
          fe-secure-openssl.c:(.text+0x1655): undefined reference to `CRYPTO_set_id_callback'
          fe-secure-openssl.c:(.text+0x165e): undefined reference to `CRYPTO_set_locking_callback'
          /usr/local/musl/lib/libpq.a(fe-secure-openssl.o): In function `pgtls_open_client':
          fe-secure-openssl.c:(.text+0x16a6): undefined reference to `ERR_clear_error'
          fe-secure-openssl.c:(.text+0x16b2): undefined reference to `SSL_connect'
          fe-secure-openssl.c:(.text+0x16c8): undefined reference to `SSL_get_peer_certificate'
          fe-secure-openssl.c:(.text+0x1773): undefined reference to `SSL_get_error'
          fe-secure-openssl.c:(.text+0x177b): undefined reference to `ERR_get_error'
          fe-secure-openssl.c:(.text+0x183d): undefined reference to `X509_get_ext_d2i'
          fe-secure-openssl.c:(.text+0x1851): undefined reference to `sk_num'
          fe-secure-openssl.c:(.text+0x188c): undefined reference to `sk_value'
          fe-secure-openssl.c:(.text+0x18ed): undefined reference to `sk_free'
          fe-secure-openssl.c:(.text+0x1931): undefined reference to `ERR_get_error'
          fe-secure-openssl.c:(.text+0x19cc): undefined reference to `sk_free'
          fe-secure-openssl.c:(.text+0x1a2d): undefined reference to `sk_free'
          fe-secure-openssl.c:(.text+0x1a40): undefined reference to `X509_get_subject_name'
          fe-secure-openssl.c:(.text+0x1a5e): undefined reference to `X509_NAME_get_index_by_NID'
          fe-secure-openssl.c:(.text+0x1a7a): undefined reference to `X509_NAME_get_entry'
          fe-secure-openssl.c:(.text+0x1a82): undefined reference to `X509_NAME_ENTRY_get_data'
          fe-secure-openssl.c:(.text+0x1b6d): undefined reference to `X509_get_subject_name'
          fe-secure-openssl.c:(.text+0x1b85): undefined reference to `X509_NAME_get_index_by_NID'
          /usr/local/musl/lib/libpq.a(fe-secure-openssl.o): In function `PQsslAttribute':
          fe-secure-openssl.c:(.text+0x1ce3): undefined reference to `SSL_get_version'
          fe-secure-openssl.c:(.text+0x1d04): undefined reference to `SSL_get_current_cipher'
          fe-secure-openssl.c:(.text+0x1d11): undefined reference to `SSL_CIPHER_get_bits'
          fe-secure-openssl.c:(.text+0x1d44): undefined reference to `SSL_get_current_compression'
          fe-secure-openssl.c:(.text+0x1d64): undefined reference to `SSL_get_current_cipher'
          fe-secure-openssl.c:(.text+0x1d6c): undefined reference to `SSL_CIPHER_get_name'
          /usr/local/musl/lib/libpq.a(fe-secure-openssl.o): In function `pq_threadidcallback':
          fe-secure-openssl.c:(.text+0xd81): undefined reference to `pthread_self'
          collect2: error: ld returned 1 exit status
          

error: aborting due to previous error

error: Could not compile `using-diesel`.
@emk
Copy link
Owner

emk commented Apr 17, 2019

Thank you! I've confirmed this bug still exists after all known workarounds are applied. I'll take a shot at it tomorrow.

@emk
Copy link
Owner

emk commented Apr 18, 2019

OK, I've spent the last several hours updating everything to the latest dependencies, and I can still reproduce this bug.

Here's a few things I've observed so far:

1. All the link errors involve libpq_sys linking to OpenSSL

...at least as far as I can tell. Here's a sample:

  = note: /home/rust/src/target/x86_64-unknown-linux-musl/release/deps/libpq_sys-3a6911426f910838.rlib(fe-secure-openssl.o): In function `SSLerrmessage':
          fe-secure-openssl.c:(.text+0x39): undefined reference to `ERR_reason_error_string'

This is interesting because libpq actually tries to link to openssl at the C level, but not (necessarily?) at the Rust level. I need to investigate this.

2. The example links to OpenSSL before libpq-sys

This:

/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/libopenssl_sys-4783752d3593d472.rlib

...appears before:

"/home/rust/src/target/x86_64-unknown-linux-musl/release/deps/libpq_sys-3a6911426f910838.rlib"

IIRC correctly, this means that libpq won't be able to access libopenssl, because symbols in a library can only be looked up in libraries that come after.

3. In the past, we've fixed similar problems by adding extern crate openssl

This suggests that libpq isn't correctly managing to link to OpenSSL by itself.

4. I'm successfully using rust-musl-builder for a number of other projects

...and some of those projects have been updated or created very recently. So at least some of the time, this does work.

Hypothesis

Taken together, this suggests that that problem might be that libpq isn't correctly declaring a dependency on libopenssl

Things to try:

  • Can I run the link command manually, reordering libopenssl-sys, and get it to work?
  • What does the build.rs script for libpq do?
  • Is there any thing in the libpq-sys bug tracker that looks relevant?
  • Have any of the other "static Rust" images fixed a similar issue lately?

@emk
Copy link
Owner

emk commented Apr 18, 2019

OK, so I have verified that:

  • Linking using-diesel in debug mode Just Works.
  • I can get using-diesel to link in release mode if I reorder the libraries we're linking against.

So this sounds like a case of libpq not correctly pulling in its dependencies, as hypothesized. On to the next step...

@emk
Copy link
Owner

emk commented Apr 18, 2019

libpq's build.rs is here: https://github.com/sgrif/pq-sys/blob/master/build.rs

It doesn't do anything in particular to ensure that OpenSSL, etc., get linked in. And none of the bugs in the bug tracker look relevant.

So now I want to look at the other, similar Rust images that statically link libpq, and see if anybody else has an existing fix for this.

@emk
Copy link
Owner

emk commented Apr 18, 2019

As mentioned in #64, it may be possible to force correct linking using:

extern crate openssl;

#[macro_use]
extern crate diesel;

@emk
Copy link
Owner

emk commented Apr 18, 2019

Other cross builders:

So there's no obvious, existing solution in any other Rust static builders.

Next steps:

  • Publish a note describing the workaround.
  • Publish my updated branch (with Ubuntu 18.04 and OpenSSL 1.1.1) as experimental and experimental-2019-04-12.
  • File an issue against pq-sys describing what's we've found, so that we discuss a possible upstream solution to remove the need for this workaround.

@emk
Copy link
Owner

emk commented Apr 19, 2019

Issue filed upstream: sgrif/pq-sys#25

@iddm
Copy link

iddm commented Apr 26, 2019

Would you mind notifying watchers of this issue when the problem is solved? I am really concerned.

@emk
Copy link
Owner

emk commented Apr 26, 2019

@vityafx Please try the workaround mentioned above:

// Order matters!
extern crate openssl;
#[macro_use]
extern crate diesel;

This should work for most current versions of Rust.

@iddm
Copy link

iddm commented Apr 26, 2019

It worked for me but I think importing openssl crate when I don't need it is a bit weird, especially breaking the order of the imports.

@onelson
Copy link

onelson commented May 14, 2019

The deliberately ordered extern crate workaround worked for me on one project, but didn't on another. After a couple hours of disbelief, I shrugged my shoulders and just ran cargo update, which was apparently all I needed to do. I'm not sure which crate was the offensive one, but included in the bumps were openssl 0.10.21 -> 0.10.22, and openssl-sys 0.9.44 -> 0.9.46.

Not sure who needs to hear this, but just in case anyone else gets stuck... give cargo update a shot.

@emk
Copy link
Owner

emk commented Jul 18, 2019

We're going to need somebody to submit a PR for sgrif/pq-sys#25. I'm extremely busy on another project right now and won't be able to tackle this for a couple of weeks. Please feel free to ping me at the end of July or early August.

@iddm
Copy link

iddm commented Aug 14, 2019

Can I use this hack still on the rust 2018 edition?

@iddm
Copy link

iddm commented Aug 20, 2019

I have asked the question about rust 2018 because it does not work in it. The hack with extern crate order. cargo update also does not help.

UPD: It worked again suddenly. I don't know why.

@iddm
Copy link

iddm commented Sep 20, 2019

  = note: /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-connect.o): In function `parseServiceFile':
          (.text+0xbd1): undefined reference to `ldap_init'
          (.text+0xbf1): undefined reference to `ldap_set_option'
          (.text+0xc05): undefined reference to `ldap_simple_bind'
          (.text+0xc39): undefined reference to `ldap_result'
          (.text+0xc57): undefined reference to `ldap_msgfree'
          (.text+0xc76): undefined reference to `ldap_set_option'
          (.text+0xcb4): undefined reference to `ldap_search_st'
          (.text+0xcda): undefined reference to `ldap_msgfree'
          (.text+0xce9): undefined reference to `ldap_err2string'
          (.text+0xd14): undefined reference to `ldap_unbind'
          (.text+0x1001): undefined reference to `ldap_unbind'
          (.text+0x101c): undefined reference to `ldap_count_entries'
          (.text+0x1055): undefined reference to `ldap_msgfree'
          (.text+0x105d): undefined reference to `ldap_unbind'
          (.text+0x1093): undefined reference to `ldap_first_entry'
          (.text+0x10b8): undefined reference to `ldap_get_values_len'
          (.text+0x10e1): undefined reference to `ldap_msgfree'
          (.text+0x11ac): undefined reference to `ldap_value_free_len'
          (.text+0x11b7): undefined reference to `ldap_unbind'
          (.text+0x124d): undefined reference to `ldap_msgfree'
          (.text+0x125d): undefined reference to `ldap_unbind'
          (.text+0x1287): undefined reference to `ldap_value_free_len'
          (.text+0x128f): undefined reference to `ldap_unbind'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-connect.o): In function `default_threadlock':
          (.text+0x1a79): undefined reference to `__fprintf_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-connect.o): In function `pqDropConnection':
          (.text+0x208b): undefined reference to `gss_delete_sec_context'
          (.text+0x20a5): undefined reference to `gss_release_name'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-connect.o): In function `PQconnectPoll':
          (.text+0x28dc): undefined reference to `__snprintf_chk'
          (.text+0x2955): undefined reference to `__snprintf_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-connect.o): In function `PQsetClientEncoding':
          (.text+0x48fb): undefined reference to `__sprintf_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-connect.o): In function `parseServiceInfo':
          (.text+0x4c8a): undefined reference to `__snprintf_chk'
          (.text+0x4d15): undefined reference to `__snprintf_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-connect.o): In function `connectOptions2':
          (.text+0x6468): undefined reference to `__snprintf_chk'
          (.text+0x67a0): undefined reference to `__fprintf_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-exec.o): In function `pqInternalNotice':
          (.text+0x128f): undefined reference to `__vsnprintf_chk'
          (.text+0x1379): undefined reference to `__sprintf_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-exec.o): In function `PQcopyResult':
          (.text+0x1677): undefined reference to `__strcpy_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-exec.o): In function `pqSaveParameterStatus':
          (.text+0x18e8): undefined reference to `__fprintf_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-exec.o): In function `PQoidStatus':
          (.text+0x3c86): undefined reference to `__memcpy_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-misc.o): In function `pqGets_internal':
          (.text+0xc7): undefined reference to `__fprintf_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-misc.o): In function `pqGetc':
          (.text+0x19b): undefined reference to `__fprintf_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-misc.o): In function `pqGetnchar':
          (.text+0x242): undefined reference to `__fprintf_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-misc.o): In function `pqSkipnchar':
          (.text+0x2ee): undefined reference to `__fprintf_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-misc.o): In function `pqGetInt':
          (.text+0x3da): undefined reference to `__fprintf_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-misc.o):(.text+0x619): more undefined references to `__fprintf_chk' follow
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-protocol2.o): In function `pqSetenvPoll':
          (.text+0xb24): undefined reference to `__sprintf_chk'
          (.text+0xc4a): undefined reference to `__sprintf_chk'
          (.text+0xcd2): undefined reference to `__sprintf_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(pqexpbuffer.o): In function `appendPQExpBufferVA':
          (.text+0x265): undefined reference to `__vsnprintf_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(chklocale.o): In function `pg_get_encoding_from_locale':
          (.text+0x1ff): undefined reference to `__fprintf_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(inet_net_ntop.o): In function `inet_net_ntop':
          (.text+0xdc): undefined reference to `__sprintf_chk'
          (.text+0x2d2): undefined reference to `__sprintf_chk'
          (.text+0x337): undefined reference to `__sprintf_chk'
          (.text+0x3b8): undefined reference to `__sprintf_chk'
          (.text+0x478): undefined reference to `__sprintf_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(inet_net_ntop.o):(.text+0x4b7): more undefined references to `__sprintf_chk' follow
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(ip.o): In function `pg_getaddrinfo_all':
          (.text+0x170): undefined reference to `__strcpy_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-secure-openssl.o): In function `SSLerrmessage':
          (.text+0x84): undefined reference to `__snprintf_chk'
          (.text+0xb7): undefined reference to `__snprintf_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-secure-openssl.o): In function `initialize_SSL':
          (.text+0x4de): undefined reference to `__snprintf_chk'
          (.text+0x5ee): undefined reference to `__snprintf_chk'
          (.text+0x6b6): undefined reference to `__snprintf_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-secure-openssl.o):(.text+0x963): more undefined references to `__snprintf_chk' follow
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-auth.o): In function `pg_GSS_error_int':
          (.text+0x5b): undefined reference to `gss_display_status'
          (.text+0x7e): undefined reference to `gss_release_buffer'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-auth.o): In function `pg_GSS_continue':
          (.text+0x15b): undefined reference to `gss_init_sec_context'
          (.text+0x188): undefined reference to `gss_release_buffer'
          (.text+0x1eb): undefined reference to `gss_release_buffer'
          (.text+0x270): undefined reference to `gss_release_name'
          (.text+0x28b): undefined reference to `gss_delete_sec_context'
          (.text+0x2a3): undefined reference to `gss_release_name'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-auth.o): In function `pg_fe_sendauth':
          (.text+0x531): undefined reference to `__snprintf_chk'
          (.text+0x545): undefined reference to `GSS_C_NT_HOSTBASED_SERVICE'
          (.text+0x55c): undefined reference to `gss_import_name'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-auth.o): In function `PQencryptPasswordConn':
          (.text+0xf34): undefined reference to `__memcpy_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(fe-auth-scram.o): In function `pg_fe_scram_exchange':
          (.text+0x5c6): undefined reference to `__snprintf_chk'
          /home/rust/src/target/x86_64-unknown-linux-musl/debug/deps/libpq_sys-f2ec40b7c53867fb.rlib(scram-common.o): In function `scram_build_verifier':
          (.text+0x5a4): undefined reference to `__sprintf_chk'
          collect2: error: ld returned 1 exit status


error: aborting due to previous error

This thing does not let me sleep normally.

@emk
Copy link
Owner

emk commented Jan 26, 2020

I haven't seen any new reports of this error in a while, so maybe the upstream fixes all went through. If you're still seeing problems on the most recent versions of everything, please feel free to reopen this issue.

Thank you to everybody who has found workarounds or fixes for this issue!

@emk emk closed this as completed Jan 26, 2020
@emk emk reopened this Jan 27, 2020
@Raniz85
Copy link

Raniz85 commented Apr 1, 2020

Just a note that if you have multiple binaries in your project you need to put the extern crate declarations at the top of all of them.

@alertedsnake
Copy link

alertedsnake commented Sep 2, 2020

I'm still having this issue and no combination of any of the suggestions I've found work. Are there any new suggestions?

Edit: actually nevermind - I forgot I had a main.rs and a lib.rs which it imports (there are multiple binaries, though I'm only building one). It's working with the proper ordering of the extern crate statements. So thanks for the help!

@adwhit
Copy link

adwhit commented Jan 4, 2021

This bug could be related to rust-lang/rust#61328 (which has bitten me multiple times). It seems to be something to do with the order in which linker inputs are declared - the above workaround presumably changes the declaration order of linker libs which somehow fixes it.

@emk emk changed the title Using Diesel Example Fails diesel link order issues sometimes break build Jan 4, 2021
@emk emk added the bug label Jan 4, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

7 participants