Piszę bibliotekę, która musi zależeć od bibliotek, które nie są obecnie kompilowane z obsługą nowego standardu. Chciałbym skompilować bibliotekę, która musi polegać na tych bibliotekach ze std = C++ 0x. Czy są jakieś problemy z robieniem tego?Wszelkie problemy z miksowaniem bibliotek zi bez std = C++ 0x
Odpowiedz
Jeśli miksujesz biblioteki skompilowane z różnymi opcjami kompilatora, musisz upewnić się, że ABI dla typów danych w interfejsie jest takie samo. Niektóre typy danych (takie jak std::string
) mają różne interfejsy i wymagania między C++ 03 i C++ 0x, więc interfejsy, które z nich korzystają, muszą być ostrożne.
Jeśli twoje interfejsy używają tylko wbudowanych typów i twoich własnych klas, a te same nie używają żadnych standardowych klas bibliotecznych, wszystko powinno być w porządku. W przeciwnym razie musisz sprawdzić konkretny podzbiór, którego używasz.
Tylko używanie C w interfejsie nie jest ogólnie wystarczające. Nie działa przy łączeniu statycznym, w systemie Unix, wymaga specjalnych opcji do 'dlopen' podczas dynamicznego łączenia, a pod Windowsem wystąpił błąd w bibliotece wciągniętej przez/MD lub/MDd, co oznaczało, że zawiedzie jeśli jedna z bibliotek użyła 'std :: string' i została skompilowana z różnymi opcjami. (Słyszałem, że ten błąd został naprawiony w VC10.) –
@ James: Zgadzam się ogólnie, ale ten problem został oznaczony ** gcc **. Jak rozumiem, intencją twórców bibliotek gcc jest zapewnienie, że powinieneś być w stanie używać kodu '-std = C++ 98' i' -std = C++ 0x' w tym samym programie, o ile interfejs pomiędzy tymi bitami kodu używa tylko kompatybilnych typów. na przykład w systemie Linux istnieje tylko jeden plik binarny 'libstdC++. so', używany zarówno przez kody' -std = C++ 98' oraz '-std = C++ 0x'. –
Istnieje zamiar programistów i tak właśnie się dzieje. Miałem problemy z uzyskaniem 'dynamic_cast' do pracy, gdy zostało wykonane w jednym' .so', a obiekt został skonstruowany w innym. I z opcjami do 'dlopen' niezbędnymi do działania' dynamic_cast' do pracy, będziesz kończył udostępnianie niektórych innych funkcji, w tym funkcji składowych 'std :: vector', itd. Oraz rozmiaru i układu' std: : wektor 'zależy od opcji kompilatora; nie musisz nawet zmieniać wersji, aby się nie udało. –
Prosta odpowiedź brzmi: nie, chyba że sprzedawca jednoznacznie to gwarantuje (a nawet wtedy). Praktycznie rzecz biorąc, cały kod połączony musi korzystać z tej samej biblioteki standardowej i być kompilowany z tą samą wersją kompilatora, używając tych samych opcji. Istnieją sposoby obejścia tego problemu, przynajmniej dla dynamicznie powiązanych bibliotek, ale działają one tylko wtedy, gdy interfejs między bibliotekami jest czysty C, a użytkownik podejmuje specjalne kroki podczas łączenia (specjalne opcje z dlopen
--- żadna biblioteka nie używa std::string
w VC++ przed wersja 10 itd.). W przeciwnym razie szukasz kłopotów.
- 1. C++ 0x std :: shared_ptr vs. boost :: shared_ptr
- 2. C++ łączenie bibliotek STD z różnymi standardami C++
- 3. Problemy z std :: Chrono
- 4. Nadpisywanie klonów zi bez Cloneable
- 5. Kompatybilność bibliotek między C++ 11 i C++ 03
- 6. asynchroniczna funkcja C++ 0x
- 7. Jak zwrócić fstream (C++ 0x)
- 8. C++ 0x regex w GCC
- 9. Wstawianie wydajności zi bez indeksu
- 10. std :: przyszły wyjątek na eksperymentalnej implementacji gcc C++ 0x
- 11. C++ Wszelkie porady dotyczące śledzenia naruszeń dostępu?
- 12. C++ 0x emplace_back z non-copyable Rzeczy
- 13. C++ std :: enable_if warianty ograniczające i problemy
- 14. Zwiększenie lambda :: _ 1 w C++ 0x
- 15. C++: Problemy z konstruktorem
- 16. C++ 0x lambdas styl kodowania
- 17. Jak zaimplementować "Variadic Template" z pre-C++ 0x (VS2008)?
- 18. C++ 0x - Kiedy?
- 19. Czy std :: sort działa z funkcją lambda w C++ 0x/C++ 11?
- 20. enable_shared_from_this (C++ 0x): co robię źle?
- 21. Różnica między uruchomieniem programu zi bez mpirun
- 22. Zamknięcie i zagnieżdżone lambdy w C++ 0x
- 23. Obsługa specyfikacji ++ g ++ i C++ 0x
- 24. wszelkie znane problemy delphi do testowania kompatybilności z Windows 7
- 25. czwartorzędowych bibliotek w C/C++
- 26. Spring: obiekt wiązania zi bez @ModelAttribute
- 27. odwołanie do funkcji składni - zi bez &
- 28. problemy z biblioteką C++ 11 i g ++ 4.4.7
- 29. Wszelkie doświadczenia z C# i ZeroC ICE
- 30. Wszelkie bezpłatne biblioteki C# do nagrywania wideo (z ekranu) dookoła?
Nagłówki mogą być problemem, zobacz tutaj: http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch03s02.html –