Próbuję zmodyfikować bibliotekę Racer, aby emitować udostępnioną bibliotekę zamiast rlib.Wybieranie biblioteki współdzielonej lub statycznej za pomocą Cargo
Aby to zrobić, dodałem crate-type = ["dylib"]
do sekcji [lib]
manifestu Cargo, a następnie uruchomiłem cargo build --lib
. To zadziałało znakomicie i wydano libracer.so
.
Niestety, teraz nie mogłem zbudować binarnej wersji Racer, która zależy od statycznej wersji biblioteki. Uruchamianie cargo build
narzeka:
Compiling racer v1.0.0 (file:///home/georgev/dotfiles/vim/bundle/racer)
error: cannot satisfy dependencies so `std` only shows up once
help: having upstream crates all available in one format will likely make this go away
error: cannot satisfy dependencies so `core` only shows up once
help: having upstream crates all available in one format will likely make this go away
error: cannot satisfy dependencies so `collections` only shows up once
help: having upstream crates all available in one format will likely make this go away
error: cannot satisfy dependencies so `rustc_unicode` only shows up once
help: having upstream crates all available in one format will likely make this go away
error: cannot satisfy dependencies so `alloc` only shows up once
help: having upstream crates all available in one format will likely make this go away
error: cannot satisfy dependencies so `libc` only shows up once
help: having upstream crates all available in one format will likely make this go away
error: cannot satisfy dependencies so `rand` only shows up once
help: having upstream crates all available in one format will likely make this go away
error: aborting due to 7 previous errors
Could not compile `racer`.
Zmieniłem crate-type
do ["dylib", "bin"]
, co pozwoliło kompilacja, aby odnieść sukces. Jednak cargo build --lib
nie będzie już emitować udostępnionej biblioteki (tylko rlib).
Jak mogę określić, jaki rodzaj biblioteki chciałbym budować, a jednocześnie nadal pozwalać na statyczną budowę wspomnianej biblioteki w celu włączenia do pliku wykonywalnego?