Potrzebuję cross-kompilacji biblioteki C/C++. Biblioteka zależy od kilku bibliotek C/C++. Niektóre biblioteki zależą od innych bibliotek. Wszystkie biblioteki mają skrypt configure. Wiem, jak kompilować i instalować biblioteki w systemie hosta - instaluj zależności przed biblioteką, której potrzebuję. Oczywiście nie będzie to działać podczas kompilacji skrośnej. Wszelkie wskazówki są mile widziane. Dziękuję Ci.Jak przeprowadzić cross-kompilację C++ - biblioteka z zależnościami?
Odpowiedz
Ogólnie rzecz biorąc, aby skompilować pakiet autouzyskiwania, należy przekazać kilka dodatkowych argumentów do ./configure
: --host
i . --host
to nazwa systemu, na którym będą działać uruchomione programy, a --build
to nazwa systemu, który wykonuje kompilację.
Kiedy mówię "nazwa systemu", mam na myśli krotki formularz ARCH-VENDOR-OS-LIBC
. (Na przykład: i686-pc-linux-gnu
to krotka opisująca system, z którego aktualnie korzystam.) Czasami części krotki są usuwane, tak jak w przypadku zestawu narzędzi mingw32 (w moim systemie, narzędzia krzyżowe mingw32 są instalowane z krotką i586-mingw32msvc
i/lub amd64-mingw32msvc
).
(Jest jeszcze jeden argument, aby skonfigurować, --target
, który jest dla przekrojów kompilacji kompilatorów i określa system, który kompilator budowany będzie kierować podczas generowania kodu.)
Każdy toolchain ma swój własny podkatalog pod /usr
takich jak /usr/i586-mingw32msvc
. Będziesz chciał zainstalować nowe pakiety tutaj, aby je znaleźć. Użyj argumentu --prefix
do configure
.
Więc do cross-kompilacji z mojego systemu GNU/Linux do systemu mingw32, chciałbym uruchomić configure
takiego:
./configure --host=i586-mingw32msvc --build=i686-pc-linux-gnu --prefix=/usr/i586-mingw32msvc
więc zacząć z liści wykresie zależność i kieruj się ku górze. Możesz także przekazać --enable-static --disable-shared
do configure
: to zatrzyma tworzenie dynamicznych bibliotek dla pakietów z libtoolem. Być może będziesz musiał zainstalować niektóre pakiety natywnie, a także skompilować je, jeśli pakiet musi uruchomić program jako część kompilacji.
Czasami testy configure
nie powiedzie się: na przykład, gdzie próbuje skompilować i uruchomić program. Często te testy ustawiają zmienną pamięci podręcznej, którą można również przekazać w wierszu poleceń do configure
. Podobnie można nadpisywać takie rzeczy jak ścieżki programów i flagi kompilacji/łączenia bibliotek. Sprawdź swój pakiet: ./configure --help
.
Należy utworzyć statyczne biblioteki dla wszystkich zależności i połączyć statycznie z plikiem wykonywalnym. Będziesz musiał użyć kompilatora cross, aby utworzyć te biblioteki. Możesz znaleźć kilka dobrych przykładów, przeglądając "kompilację krzyżową statycznego linku statycznego" pod numer "
Nie ma absolutnie żadnego problemu w budowaniu przeciwko skompilowanym krzyżowo bibliotekom współdzielonym, o ile upewniasz się, że budujesz na podstawie nagłówków i bibliotek dla systemu docelowego zamiast hosta rozwoju.
Nawet jeśli zbudowałeś wszystkie oczywiste zależności jako biblioteki statyczne, prawdopodobnie nadal będziesz się łączyć ze wspólnymi bibliotekami wykonawczymi języków C i C++. Należy również upewnić się, że pliki nagłówkowe używane do kompilacji krzyżowej pochodzą z systemu docelowego, a nie od hosta programistycznego.
Nie robienie tego prawdopodobnie będzie działać przez większość czasu. W pozostałym czasie otrzymasz subtelne, trudne do debugowania awarie.
Sposób, w jaki to się dzieje, zależy od tego, jak działa łańcuch krzyżowy i środowisko docelowe. Jak już wspomniałeś, przypuszczam, że to GCC i smak Linuksa jako hosta rozwoju i celu - chociaż zasady odnoszą się również do używania innych hostów programistycznych.
Kompilacje krzyżowe GCC i bin-utils są zwykle budowane w taki sposób, że domyślna biblioteka i ścieżki wyszukiwania nagłówków wskazują na kopię systemu plików głównego systemu docelowego. W tym miejscu linker będzie szukał bibliotek współdzielonych, z którymi można łączyć, i to tutaj instalujesz zależne biblioteki współdzielone, gdy są one zbudowane.
Można zmienić domyślny katalog główny GCC, przekazując opcję --sysroot <mySysRoot>
do GCC w wierszu poleceń.
- 1. C - Kompilacja z zależnościami zawartymi
- 2. Tworzenie słoju z zależnościami i zależnościami testowymi
- 3. Zarządzanie zależnościami C o DUB
- 4. Maven - kompilacja z zależnościami
- 5. Jak wygenerować wiązanie Xamarin dla AAR z wieloma zależnościami?
- 6. Moduły Autofac z własnymi zależnościami
- 7. Wyłącz uprawnienia zależnościami
- 8. Biblioteka współdzielona C++ od C
- 9. Serwer ciągłej integracji dla C++ - A co z zależnościami bibliotek?
- 10. Jak przeprowadzić podstawową agregację z Dynamodb?
- 11. Biblioteka analiz sentymentów C++
- 12. Jak wyselekcjonować funkcję Pythona z jego zależnościami?
- 13. Biblioteka biblioteki Scrypt C
- 14. Biblioteka refleksyjna C++ 11
- 15. Biblioteka IRC w C#
- 16. Jak przeprowadzić procedurę tworzenia aplikacji na iPhone'a z protokołem uPNP?
- 17. Biblioteka skryptów C#/.NET
- 18. Używanie Guice z kołowymi zależnościami
- 19. Używanie Kompozytora z lokalnymi zależnościami
- 20. Biblioteka z generowaniem grafów w języku C#
- 21. Najlepsza biblioteka sieci C/C++
- 22. C# biblioteka rysowania wykresów?
- 23. C++ Biblioteka wzmacniania uczenie
- 24. Biblioteka SMS w C#
- 25. Biblioteka UUID dla C?
- 26. C++ Biblioteka detekcji FFT?
- 27. Zarządzanie zależnościami DLL z Maven
- 28. Biblioteka JSON dla C#
- 29. Spectrogram C++ biblioteka
- 30. Biblioteka USB w C++