Question: How can I work around (or fix) the situation where two dependencies of mine link to the same library, but that library can't be linked twice? This seems like something that would typically be solved with a shared library, but I'm not sure how to approach it with Rust.
Details:
I'm making a web app in Rust using the Nickel framework and rust-postgres for a database. I get the following error when building:
> cargo build
native library `openssl` is being linked to by more than one package, and can only be linked to by one package
openssl-sys v0.3.3 (https://github.com/sfackler/rust-openssl.git#ee66da60)
openssl-sys v0.3.3
Looking through Cargo.lock, openssl is referenced by http (which is a dependency of nickel) and rust-postgres.
My Cargo.toml looks like this:
[package]
name = "goodoldweb"
version = "0.0.1"
authors = ["..."]
[dependencies.nickel]
git="https://github.com/nickel-org/nickel.rs.git"
[dependencies.postgres]
git="https://github.com/sfackler/rust-postgres.git"
Here's the full Cargo.lock:
[root]
name = "goodoldweb"
version = "0.0.1"
dependencies = [
"nickel 0.1.0 (git+https://github.com/nickel-org/nickel.rs.git)",
"postgres 0.6.1 (git+https://github.com/sfackler/rust-postgres.git)",
]
[[package]]
name = "byteorder"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "gcc"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "groupable"
version = "0.1.0"
source = "git+https://github.com/nickel-org/groupable-rs#efc8d769f611558f086322cd8d2d5ff53314e435"
[[package]]
name = "http"
version = "0.1.0-pre"
source = "git+https://github.com/nickel-org/rust-http.git#1997192b7662ee5bf3bf381bfd9e2aa70f85a545"
dependencies = [
"openssl 0.3.3 (git+https://github.com/sfackler/rust-openssl.git)",
"time 0.1.17 (git+https://github.com/rust-lang/time)",
"url 0.2.18 (git+https://github.com/nickel-org/rust-url.git)",
]
[[package]]
name = "libc"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "libressl-pnacl-sys"
version = "2.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"pnacl-build-helper 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "log"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "matches"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "nickel"
version = "0.1.0"
source = "git+https://github.com/nickel-org/nickel.rs.git#8c2e6a9bdbce0a3ec53d559b86f5060ee1ea6c29"
dependencies = [
"groupable 0.1.0 (git+https://github.com/nickel-org/groupable-rs)",
"http 0.1.0-pre (git+https://github.com/nickel-org/rust-http.git)",
"log 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
"nickel_macros 0.0.1 (git+https://github.com/nickel-org/nickel.rs.git)",
"plugin 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
"regex_macros 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
"rust-mustache 0.3.0 (git+https://github.com/nickel-org/rust-mustache.git)",
"rustc-serialize 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
"time 0.1.17 (git+https://github.com/rust-lang/time)",
"typemap 0.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
"url 0.2.18 (git+https://github.com/nickel-org/rust-url.git)",
]
[[package]]
name = "nickel_macros"
version = "0.0.1"
source = "git+https://github.com/nickel-org/nickel.rs.git#8c2e6a9bdbce0a3ec53d559b86f5060ee1ea6c29"
[[package]]
name = "openssl"
version = "0.3.3"
source = "git+https://github.com/sfackler/rust-openssl.git#ee66da6060c57bc86906261ee3d684fac1fd05e4"
dependencies = [
"openssl-sys 0.3.3 (git+https://github.com/sfackler/rust-openssl.git)",
]
[[package]]
name = "openssl"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"openssl-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "openssl-sys"
version = "0.3.3"
source = "git+https://github.com/sfackler/rust-openssl.git#ee66da6060c57bc86906261ee3d684fac1fd05e4"
dependencies = [
"gcc 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
"libressl-pnacl-sys 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"pkg-config 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "openssl-sys"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"gcc 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
"libressl-pnacl-sys 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"pkg-config 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "phantom"
version = "0.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "phf"
version = "0.6.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"phf_shared 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "phf_macros"
version = "0.6.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"phf_shared 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "phf_shared"
version = "0.6.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "pkg-config"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "plugin"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"typemap 0.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "pnacl-build-helper"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "postgres"
version = "0.6.1"
source = "git+https://github.com/sfackler/rust-postgres.git#fe6ae0c63a6e5d66d2afb785605b7d89ec47062d"
dependencies = [
"byteorder 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
"openssl 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"phf 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
"phf_macros 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-serialize 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
"time 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rand"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "regex"
version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "regex_macros"
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"regex 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rust-mustache"
version = "0.3.0"
source = "git+https://github.com/nickel-org/rust-mustache.git#58ed857c88f8e5230913c382034601f37141b4ee"
dependencies = [
"log 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-serialize 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rustc-serialize"
version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "time"
version = "0.1.17"
source = "git+https://github.com/rust-lang/time#0960d5e21b332088b04f62117514b0a02fd31259"
dependencies = [
"gcc 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "time"
version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"gcc 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "typemap"
version = "0.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"phantom 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
"unsafe-any 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "unsafe-any"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "url"
version = "0.2.18"
source = "git+https://github.com/nickel-org/rust-url.git#5801582b307c16f759b5fe11dec71385af86180c"
dependencies = [
"matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-serialize 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
]
It seems that the culprit is the fact that nickel-org's rust-http (which is a dependency of nickel) brings in sfackler/rust-openssl instead of the "official" openssl on crates.io. Unfortunately the rust-http repo doesn't have issues enabled, but I opened one on nickel's main repo: #139
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With