Pracuję nad redhat 5.2 nad projektem, który obejmuje kilka odmiennych organizacji. Każda organizacja dostarcza biblioteki, które zostały skompilowane z różnymi wersjami g ++. Obecnie wersje te obejmują wersje 4.1.1, 4.1.2 i 4.3.1. Próbuję połączyć wszystkie biblioteki razem do pliku wykonywalnego przy użyciu 4.1.2. Jakich, jeśli w ogóle, problemów mogę się spodziewać, robiąc to? Na marginesie, czy istnieje sposób na określenie, do której ABI kompiluje się każda wersja kompilatora?Mieszanie bibliotek z różnych kompilatorów C++
Odpowiedz
Może łatwiej jest statycznego linku wykonywalnego ... robi wielką binarny, ale działa na wszystkich platformach.
Ten ABI dokument Polityka szczegóły kompatybilności pomiędzy różnymi wersjami ABI. Zgodnie z tym, biblioteka libstdc++.so
powinna być kompatybilna, a po raz ostatni gcc złamał zgodność binarną na 3.4. Powinieneś być w porządku.
Nie powinno być żadnych problemów łączenie bibliotek zbudowanych z różnych wersji g ++, chyba że zostały one wymienione na stronie g ++. Ważne jest jednak, aby te biblioteki były zbudowane na tej samej platformie, która w twoim przypadku jest redhat 5.2. Biblioteka zbudowana dla platformy innej niż linux/redhat (np. Solaris) nie będzie łączyła się z twoim serwerem.
IIRC, istnieje biblioteka kompatybilności C++, która jest właśnie używana. Myślę, że to się nazywa libstdC++ - compat.
Nie można łączyć obiektów, które zależą od różnych wersji stdlibC++. – ephemient
GCC (kolekcja kompilatorów GNU) określa numery wersji i kompatybilność.
Biblioteki G ++ między 4.1.1 a 4.1.2 powinny być kompatybilne; link z najnowszym.
Biblioteki G ++ między 4.1.x a 4.2.x nie są kompatybilne; musisz coś zrekompilować.
Biblioteki G ++ między 3.x.y a 4.p.q nie są kompatybilne; musisz coś zrekompilować.
W swoim scenariuszu kod zbudowany w wersji 4.3.1 nie jest zgodny z resztą.
Albo będziesz musiał przebudować kod obecnie skompilowany w 4.3.x, więc używa 4.1.x, albo musisz przekompilować kod obecnie skompilowany z 4.1.x, więc używa zamiast niego 4.3.x.
Taka jest teoria, ale w praktyce ostatnia zmiana ABI była 3.4 –
@Edu: ale w każdej chwili w przyszłości może nastąpić zmiana, która wywoła tę zasadę, a ludzie, którzy dostali niechlujstwa na temat rzeczy mogą być za niespodzianka (konieczność ponownej kompilacji). –
- 1. C ekspresji oceny inaczej w dwóch różnych kompilatorów
- 2. Implementacje bibliotek standardowych C++ w różnych kompilatorach
- 3. Mieszanie C++ i Objective C
- 4. Mieszanie C i C++ z CMAKE
- 5. CIFilter: mieszanie obrazów o różnych rozmiarach
- 6. Instalowanie kompilatorów C/C++ w systemie Android
- 7. Jak zastosować różne opcje kompilatora dla różnych kompilatorów w cmake?
- 8. Jak korzystać z dwóch różnych kompilatorów dla różnych celów w pliku .cabal?
- 9. Mieszanie kodu VB.net z C# kod
- 10. Mieszanie plików C i Assembly
- 11. Kopiowanie/mieszanie obrazów o różnych rozmiarach za pomocą opencv
- 12. czwartorzędowych bibliotek w C/C++
- 13. Dlaczego ekspansja pakietu parametrów działa inaczej w przypadku różnych kompilatorów C++?
- 14. Mieszanie przezroczyste tekstury z głębi
- 15. Jak wdrożyć wiele wersji Androida, aby korzystać z różnych bibliotek?
- 16. Które kompilatory C++ dla kompilatorów C++ są wielowątkowe?
- 17. C++ łączenie bibliotek STD z różnymi standardami C++
- 18. Korzystanie System.Xml.Linq z linii poleceń mono kompilatorów
- 19. Wywołanie dwóch funkcji o tej samej nazwie z dwóch różnych bibliotek DLL C
- 20. Obsługa kompilatorów wyrażenia wyrażeń GNU
- 21. Czy możliwe jest mieszanie dodatków z matplotlib?
- 22. Interesujące projekty kompilatorów
- 23. Używanie różnych bibliotek DLL do debugowania i kompilacji wydania
- 24. Porównanie bibliotek bazy danych SQL C++
- 25. Mieszanie pikseli z dwóch bitmap
- 26. Mieszanie stołu z akordeonem kątowym
- 27. Dobry zbiór bibliotek dla C?
- 28. Przykłady interfejsów C do bibliotek C++?
- 29. Powszechne mieszanie
- 30. Układ repozytoriów Subversion dla bibliotek opracowanych w różnych programach
Na początku myślałem, że masz na myśli Red Hat 5.2 (Apollo), który ma ponad dziesięć lat. :) – bk1e