2015-08-12 14 views
5

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?

Odpowiedz

6

bin nie jest prawidłową wartością crate-type. Poprawne wartości to rlib, lib, staticlib i dylib. Zmiana typu skrzynki na

spowoduje zachowanie, którego szukasz.

Dlatego, że tylko rlib jest emitowany z ["dylib", "bin"] jest, ponieważ nie ma obecnie bug ciężarowy, który powoduje nieprawidłowe wartości dla crate-type produkować jedynie rlib. Złożyłem numer pull request, aby rozwiązać ten problem.

Powiązane problemy