supranational / blst

Multilingual BLS12-381 signature library
Apache License 2.0
467 stars 177 forks source link

Symbol collision with openssl #21

Closed paulhauner closed 4 years ago

paulhauner commented 4 years ago

I've been working to create portable versions of Lighthouse, which has meant vendoring openssl as a static library.

During linking I get the following error from cargo, which indicates duplicate symbols between openssl (already defined) and blst:

error: linking with `cc` failed: exit code: 1
  |
  = note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-m64" "-L" "/rust/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/target/release/build/eth2_testnet_config-f80d9826a04c3cd1/build_script_build-f80d9826a04c3cd1.build_script_build.5xlfh9ot-cgu.0.rcgu.o" "/target/release/build/eth2_testnet_config-f80d9826a04c3cd1/build_script_build-f80d9826a04c3cd1.build_script_build.5xlfh9ot-cgu.1.rcgu.o" "/target/release/build/eth2_testnet_config-f80d9826a04c3cd1/build_script_build-f80d9826a04c3cd1.build_script_build.5xlfh9ot-cgu.10.rcgu.o" "/target/release/build/eth2_testnet_config-f80d9826a04c3cd1/build_script_build-f80d9826a04c3cd1.build_script_build.5xlfh9ot-cgu.11.rcgu.o" "/target/release/build/eth2_testnet_config-f80d9826a04c3cd1/build_script_build-f80d9826a04c3cd1.build_script_build.5xlfh9ot-cgu.12.rcgu.o" "/target/release/build/eth2_testnet_config-f80d9826a04c3cd1/build_script_build-f80d9826a04c3cd1.build_script_build.5xlfh9ot-cgu.13.rcgu.o" "/target/release/build/eth2_testnet_config-f80d9826a04c3cd1/build_script_build-f80d9826a04c3cd1.build_script_build.5xlfh9ot-cgu.14.rcgu.o" "/target/release/build/eth2_testnet_config-f80d9826a04c3cd1/build_script_build-f80d9826a04c3cd1.build_script_build.5xlfh9ot-cgu.15.rcgu.o" "/target/release/build/eth2_testnet_config-f80d9826a04c3cd1/build_script_build-f80d9826a04c3cd1.build_script_build.5xlfh9ot-cgu.2.rcgu.o" "/target/release/build/eth2_testnet_config-f80d9826a04c3cd1/build_script_build-f80d9826a04c3cd1.build_script_build.5xlfh9ot-cgu.3.rcgu.o" "/target/release/build/eth2_testnet_config-f80d9826a04c3cd1/build_script_build-f80d9826a04c3cd1.build_script_build.5xlfh9ot-cgu.4.rcgu.o" "/target/release/build/eth2_testnet_config-f80d9826a04c3cd1/build_script_build-f80d9826a04c3cd1.build_script_build.5xlfh9ot-cgu.5.rcgu.o" "/target/release/build/eth2_testnet_config-f80d9826a04c3cd1/build_script_build-f80d9826a04c3cd1.build_script_build.5xlfh9ot-cgu.6.rcgu.o" "/target/release/build/eth2_testnet_config-f80d9826a04c3cd1/build_script_build-f80d9826a04c3cd1.build_script_build.5xlfh9ot-cgu.7.rcgu.o" "/target/release/build/eth2_testnet_config-f80d9826a04c3cd1/build_script_build-f80d9826a04c3cd1.build_script_build.5xlfh9ot-cgu.8.rcgu.o" "/target/release/build/eth2_testnet_config-f80d9826a04c3cd1/build_script_build-f80d9826a04c3cd1.build_script_build.5xlfh9ot-cgu.9.rcgu.o" "-o" "/target/release/build/eth2_testnet_config-f80d9826a04c3cd1/build_script_build-f80d9826a04c3cd1" "/target/release/build/eth2_testnet_config-f80d9826a04c3cd1/build_script_build-f80d9826a04c3cd1.3505t472p1rxx8d9.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-Wl,-O1" "-nodefaultlibs" "-L" "/target/release/deps" "-L" "/target/release/build/blst-9371ea9d4f785b6a/out" "-L" "/target/release/build/ring-2576dc4f14a87596/out" "-L" "/target/release/build/libsqlite3-sys-028045c599cbd948/out" "-L" "/target/release/build/openssl-sys-b8f5860d05172a46/out/openssl-build/install/lib" "-L" "/rust/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/target/release/deps/libreqwest-8554af7f94b086ee.rlib" "/target/release/deps/libhyper_tls-85c3f52119d8e093.rlib" "/target/release/deps/libipnet-a7fb6f02dcdb374c.rlib" "/target/release/deps/libtokio_tls-2bafd832aa83b03a.rlib" "/target/release/deps/libencoding_rs-f47002981754d86e.rlib" "/target/release/deps/libserde_urlencoded-0beb76c71f0f9b89.rlib" "/target/release/deps/libbase64-81fb7a3de7920337.rlib" "/target/release/deps/libmime_guess-0fce326879fca279.rlib" "/target/release/deps/libunicase-22c5590a75454b10.rlib" "/target/release/deps/libmime-9028ffd6b66d5a7a.rlib" "/target/release/deps/libnative_tls-f87010ecba179e74.rlib" "/target/release/deps/libopenssl_probe-c94d77228ca05eeb.rlib" "/target/release/deps/libopenssl-0382c8b8a815da34.rlib" "/target/release/deps/libopenssl_sys-ac675114625945ad.rlib" "/target/release/deps/libforeign_types-e6850f3f6ab87d8d.rlib" "/target/release/deps/libforeign_types_shared-514f271abd9dcb1d.rlib" "/target/release/deps/libhyper-5472c2bf7440e591.rlib" "/target/release/deps/libhttparse-0b84b879b01ace27.rlib" "/target/release/deps/libwant-2f95fb59033dc3cc.rlib" "/target/release/deps/libtry_lock-3fcfb9a79f999690.rlib" "/target/release/deps/libh2-fc76a0624648478f.rlib" "/target/release/deps/libindexmap-97a6c9a28c898ae9.rlib" "/target/release/deps/libhashbrown-1c75b6870c81d067.rlib" "/target/release/deps/libtokio_util-fd20f3c0dc0057ee.rlib" "/target/release/deps/libsocket2-527ba7744fe478af.rlib" "/target/release/deps/libtower_service-9d14a18aa9ec401f.rlib" "/target/release/deps/libtracing-bb64b643ab3ab47c.rlib" "/target/release/deps/libtracing_core-c16b67022a9bc9e2.rlib" "/target/release/deps/libtokio-53b210f35bd8ead5.rlib" "/target/release/deps/libsignal_hook_registry-307f62036afe760e.rlib" "/target/release/deps/libarc_swap-08b842736ed53d42.rlib" "/target/release/deps/libmio_uds-f1b01f66f1a6d177.rlib" "/target/release/deps/libmio-572e635e562870bc.rlib" "/target/release/deps/libiovec-4d3855f43e6ae4df.rlib" "/target/release/deps/libnet2-a96c450616b7ff39.rlib" "/target/release/deps/libpin_project_lite-26d68186f2482f16.rlib" "/target/release/deps/libhttp_body-2678c6cea2a1f74e.rlib" "/target/release/deps/libfutures_util-926b97d1a3e51a08.rlib" "/target/release/deps/libmemchr-fa9b7adacce34692.rlib" "/target/release/deps/libproc_macro_nested-ebcc1646b95e9e82.rlib" "/target/release/deps/libfutures-1e51387ca0ed956e.rlib" "/target/release/deps/libfutures_io-ec5b8a96624282f2.rlib" "/target/release/deps/libslab-e1b177a90421fcb5.rlib" "/target/release/deps/libfutures_channel-a06e86628c520166.rlib" "/target/release/deps/libpin_project-5888f93c514d4c4f.rlib" "/target/release/deps/libfutures_sink-f5a2e83e5606de49.rlib" "/target/release/deps/libfutures_task-6dee730c29d08740.rlib" "/target/release/deps/libonce_cell-4f89fede75132748.rlib" "/target/release/deps/libparking_lot-008820c471764ac5.rlib" "/target/release/deps/libparking_lot_core-6a8d5aac23394d22.rlib" "/target/release/deps/liblock_api-bc84e94bb6be3b36.rlib" "/target/release/deps/libpin_utils-abc99c3ae697a3d7.rlib" "/target/release/deps/libfutures_core-7394af138f43fd8e.rlib" "/target/release/deps/liburl-fd13b2968901b466.rlib" "/target/release/deps/libpercent_encoding-beb548f7fbaa198d.rlib" "/target/release/deps/libidna-619be24928d079c4.rlib" "/target/release/deps/libunicode_normalization-301d5ba88b28b166.rlib" "/target/release/deps/libtinyvec-1ea3f44ee5fc5858.rlib" "/target/release/deps/libunicode_bidi-e08f9552f9f382a4.rlib" "/target/release/deps/libmatches-8cd9af4a7f899158.rlib" "/target/release/deps/libhttp-d56db25500e32e7d.rlib" "/target/release/deps/libfnv-32aea7382b61848c.rlib" "/target/release/deps/libhandlebars-b08252ca284e3d53.rlib" "/target/release/deps/libpest-c9cf2d5a9dcebfd8.rlib" "/target/release/deps/libucd_trie-9376a72a54b14696.rlib" "/target/release/deps/libserde_json-3ebf8e5838f343ff.rlib" "/target/release/deps/libryu-fce13a80f1ff55e4.rlib" "/target/release/deps/libitoa-e8be65b96c1c4287.rlib" "/target/release/deps/libquick_error-414a73e455c6dbdd.rlib" "/target/release/deps/libeth2_config-b98313cbba557eaa.rlib" "/target/release/deps/libtypes-9922c132c755a3d2.rlib" "/target/release/deps/libslog-91b967d4301de7ab.rlib" "/target/release/deps/libcompare_fields-3d9c36773428e99a.rlib" "/target/release/deps/libdirs-061a3e8953d7b9a1.rlib" "/target/release/deps/libdirs_sys-0ddc1d62db5c4685.rlib" "/target/release/deps/librusqlite-f7ae25b21ba8b62e.rlib" "/target/release/deps/libtime-2cf742b08c31dbdf.rlib" "/target/release/deps/libbitflags-c74b1b8d1e8f9660.rlib" "/target/release/deps/libfallible_streaming_iterator-0ac1ce980e2d8ebc.rlib" "/target/release/deps/libfallible_iterator-12cc4918bbe1bf48.rlib" "/target/release/deps/liblru_cache-0988af52d825971e.rlib" "/target/release/deps/liblibsqlite3_sys-2587f56b8c60d5b9.rlib" "/target/release/deps/libswap_or_not_shuffle-ce9ba8310597e235.rlib" "/target/release/deps/libcached_tree_hash-e3269ddc876e285b.rlib" "/target/release/deps/libssz_types-f8e12236cc72e1c7.rlib" "/target/release/deps/libtypenum-972aadf3a52fcf7a.rlib" "/target/release/deps/librand_xorshift-b7beef0ae4da1a1d.rlib" "/target/release/deps/libeth2_interop_keypairs-98348466bfd611a7.rlib" "/target/release/deps/libserde_yaml-8147d4a7df260ce2.rlib" "/target/release/deps/libdtoa-a00da8193e23dc72.rlib" "/target/release/deps/libyaml_rust-b1132581acd8da15.rlib" "/target/release/deps/liblinked_hash_map-6585ebdbeac56aed.rlib" "/target/release/deps/libnum_bigint-2cc3c04e0fb19dc4.rlib" "/target/release/deps/libnum_integer-82310229b4a02121.rlib" "/target/release/deps/libnum_traits-fdea96309b91f98a.rlib" "/target/release/deps/liblog-2d4953f5690c3429.rlib" "/target/release/deps/libbls-f8fb8a157a1e5f73.rlib" "/target/release/deps/libmilagro_bls-378037218fcbbd41.rlib" "/target/release/deps/libamcl-2a75d0291c07f714.rlib" "/target/release/deps/libhex-cb9304af7205c48f.rlib" "/target/release/deps/libblst-f24ffced809e69d4.rlib" "/target/release/deps/libthreadpool-3f53d1bf42699f77.rlib" "/target/release/deps/libzeroize-15e0634389e4352b.rlib" "/target/release/deps/libssz-241fb120a8f7667a.rlib" "/target/release/deps/libserde_hex-b3f7ec2ba6bcb33e.rlib" "/target/release/deps/libhex-01e4031a68a52844.rlib" "/target/release/deps/libtree_hash-f510e2f95c45f4dc.rlib" "/target/release/deps/libsmallvec-be015730e60a1d5f.rlib" "/target/release/deps/librayon-439da60135725620.rlib" "/target/release/deps/librayon_core-e5bcb1180adc1be2.rlib" "/target/release/deps/libnum_cpus-df749efb73077f5f.rlib" "/target/release/deps/libcrossbeam_deque-a8b5f613ba1adc75.rlib" "/target/release/deps/libcrossbeam_epoch-3287268bfdc33002.rlib" "/target/release/deps/libscopeguard-981e0fd01390580f.rlib" "/target/release/deps/libmemoffset-e35e5516b0a74720.rlib" "/target/release/deps/libcrossbeam_queue-ef4de43db3543d2b.rlib" "/target/release/deps/libcrossbeam_utils-df47abda0d2411cd.rlib" "/target/release/deps/libmaybe_uninit-221c27a634e131c5.rlib" "/target/release/deps/libeither-277d2d8fb6dd8acf.rlib" "/target/release/deps/libmerkle_proof-88a6a6a415f087d8.rlib" "/target/release/deps/libsafe_arith-e6488697dafac224.rlib" "/target/release/deps/libethereum_types-24de5876b3fb154f.rlib" "/target/release/deps/libethbloom-fc3f1b2a32546fd5.rlib" "/target/release/deps/libtiny_keccak-c5ab25563b70a73e.rlib" "/target/release/deps/libprimitive_types-1c91ce6b1f45fff8.rlib" "/target/release/deps/libimpl_codec-19eea1bb4ceb871f.rlib" "/target/release/deps/libparity_scale_codec-42c213969c9c54f7.rlib" "/target/release/deps/libbyte_slice_cast-81b414f4afcce7e2.rlib" "/target/release/deps/libarrayvec-6e24743649c361b9.rlib" "/target/release/deps/libuint-17fc075c0c0f1515.rlib" "/target/release/deps/libcrunchy-61d5f9ffa08e7808.rlib" "/target/release/deps/libimpl_serde-e82472131d2d37fe.rlib" "/target/release/deps/libserde-be0a196a4cfea052.rlib" "/target/release/deps/libimpl_rlp-2a6de41817dac32e.rlib" "/target/release/deps/librlp-a03224ccba6b4199.rlib" "/target/release/deps/libfixed_hash-e71d48d5abff73b1.rlib" "/target/release/deps/librand-0b1da1fbe4932acc.rlib" "/target/release/deps/librand_chacha-618e4ef498dbe97f.rlib" "/target/release/deps/libppv_lite86-0feb83f6519fdc19.rlib" "/target/release/deps/librand_core-0d70a91769289afc.rlib" "/target/release/deps/libgetrandom-b4fb2a9bd67ca6b2.rlib" "/target/release/deps/libcfg_if-b54bd1f3a94e0e76.rlib" "/target/release/deps/librustc_hex-43614664506e6dcb.rlib" "/target/release/deps/libbyteorder-fb4a30392f846b17.rlib" "/target/release/deps/libstatic_assertions-f0e656d75f7dd446.rlib" "/target/release/deps/libeth2_hashing-c69517f0367e772b.rlib" "/target/release/deps/libring-00e4bf62b6678855.rlib" "/target/release/deps/liblazy_static-d64e9aa0f0de57b3.rlib" "/target/release/deps/libspin-ad732aaaa7d97aa6.rlib" "/target/release/deps/liblibc-636aca7798be1458.rlib" "/target/release/deps/libuntrusted-45d6058bac1acda1.rlib" "/target/release/deps/libint_to_bytes-8b87d8a5d3b49e80.rlib" "/target/release/deps/libbytes-f26916b0b8c43cfa.rlib" "-Wl,--start-group" "/rust/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-8bb11f807a7b6b4c.rlib" "/rust/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-ca8087507780d964.rlib" "/rust/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-259c92b387c1c166.rlib" "/rust/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-16e0a2fbbb8e14b3.rlib" "/rust/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace-8a1651b8e23d2aaf.rlib" "/rust/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace_sys-23bdd98b0574083e.rlib" "/rust/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-855a92055ec33e2e.rlib" "/rust/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-24c70dd44fbacdfb.rlib" "/rust/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-b326273841bae587.rlib" "/rust/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-ac3c1f0e16507051.rlib" "/rust/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-a5729542b65954aa.rlib" "/rust/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-09bd1119ab1cad7d.rlib" "/rust/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-9a787681bfbeaf61.rlib" "-Wl,--end-group" "/rust/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-5a0398ee67f74664.rlib" "-Wl,-Bdynamic" "-lutil" "-ldl" "-lutil" "-ldl" "-lrt" "-lpthread" "-lgcc_s" "-lc" "-lm" "-lrt" "-lpthread" "-lutil" "-ldl" "-lutil"
  = note: /target/release/deps/libblst-f24ffced809e69d4.rlib(assembly.o): In function `sha256_block_data_order':
          (.text+0x4c0): multiple definition of `sha256_block_data_order'
          /target/release/deps/libopenssl_sys-ac675114625945ad.rlib(sha256-x86_64.o):(.text+0x0): first defined here
          collect2: error: ld returned 1 exit status

I can resolve this issue and produce a binary if I use the following commit of blst: https://github.com/sigp/blst/commit/284f7059642851c760a09fb1708bcb59c7ca323c. This is basically s/sha256_block_data_order/blst_sha256_block_data_order across this project.

Linking is not my domain, so I open to more elegant solutions that my previous commit. Thank you :)

dot-asm commented 4 years ago

Resolved. Thanks for report!