2013-02-20 10 views
62

Zajmuję się tworzeniem plików wykonywalnych interfejsu wiersza poleceń dla osx i linux przy użyciu c/C++. Projekt będzie łączył się z opencv. Czy powinienem używać libC++ lub libstdC++?Czy powinienem używać libC++ lub libstdC++?

+1

Nie wiem, ale może Cię to zainteresować: http://clang-developers.42468.n3.nabble.com/Problem-with-libc-libstdc-interoperability-on-OS-X-td4030121 .html – DarenW

+1

[Ta odpowiedź] (http://stackoverflow.com/questions/12542971/using-libstdc-compiled-libraries-w-clang-stdlib-libc) może być pomocna. –

+1

jeśli łączysz się z opencv, użyj libstdC++. Oto dlaczego http://stackoverflow.com/questions/13037659/opencv-build-issue-cant-find-ext-atomicity-h – Loozie

Odpowiedz

59

użyłbym natywnej biblioteki dla każdego systemu operacyjnego tj libstdC++ na GNU/Linux i libC++ na Mac OS X.

libC++ nie jest w 100% kompletna na GNU/Linux, a nie ma realne zaletą korzystania z niego, gdy libstdC++ jest bardziej kompletny. Ponadto, jeśli chcesz połączyć się z innymi bibliotekami napisanymi w C++, prawie na pewno zostaną zbudowane z libstdC++, więc będziesz musiał również połączyć się z nimi, aby z nich korzystać.

+2

Czy możesz opracować/dostarczyć linki o statusie kompletności biblioteki libC++ w systemie Linux? Nie do końca rozumiem, dlaczego jest to zależne od platformy, ponieważ libC++ to tylko garść nagłówków biblioteki Standard. Czy masz na myśli, że trzeba zbudować Clang wrt do bibliotek uruchomieniowych LLVM, które nie są dobrze obsługiwane w systemie Linux? – TemplateRex

+1

@TemplateRex, nie znam aktualnego statusu, możesz zajrzeć na http://libcxx.llvm.org/. Nie podążam za libC++, więc pytasz niewłaściwą osobę, ale czy sugerujesz, że "garść nagłówków Standard Library" nigdy nie będzie miała żadnego specyficznego dla platformy kodu? –

+0

Cóż, skoro możesz zainstalować Linuksa na prawie tym samym sprzęcie Apple, na którym działa Mac OS X, zastanawiam się, skąd wzięłyby się zależności między platformami w nagłówkach C++? Być może niektóre opakowania wokół wbudowanego procesora wewnętrznego lub obsługi IO i obsługi wyjątków zależą od systemu, ale zrozumiałem, że takie rzeczy są obsługiwane w warstwach binarnych typu librcxxrt. Czy nagłówki w Bibliotece standardowej nie powinny być bardziej lub mniej wtykane? – TemplateRex

24

Główne dystrybucje Linux nie zapewniają LLVM libC++, ponieważ:

  1. W przeciwieństwie do Apple i FreeBSD GPL + 3 nie jest problem, więc nie ma potrzeby, aby wdrożyć kolejny stos tutaj.
  2. Komponenty dla systemu Linux zostały opracowane na podstawie GNU libstd ++ przez wieki. Niektóre z nich nie opierają się na niczym innym.
  3. Chociaż libC++ ma silne działanie w nowych funkcjach, ma pewne problemy ze starszym kodem.

Jeśli w końcu libC++ stanie się częścią dystrybucji, będzie to składnik opcjonalny. połączenie z nią prawdopodobnie będzie wymagało dodatkowych opcji.

Tak jak powiedział Jonathan, powinieneś używać dowolnego narzędzia dołączonego domyślnie. Clang jest bezpieczny w Linuksie, ponieważ jest skonfigurowany jako zamiennik GCC, więc pod tym względem nie musisz się martwić o 2 kompilatory. Również dlatego, że celujesz w dwie platformy, powinieneś rzucić okiem na cmake.

+1

Clang nie jest zamiennikiem GCC ... Tylko innym kompilatorem. –

-2

Mówi się, że libC++ ma więcej czytelnych dla człowieka komunikatów o błędach na błędach szablonu.

+10

Czy na pewno nie mylicie twierdzeń o lepszej diagnostyce z klangiem niż gcc? Co nie zawsze jest prawdą w dzisiejszych czasach i jest całkowicie oddzielone od standardowej implementacji biblioteki. Jeśli masz jakieś przykłady, gdzie wiadomości są lepsze, a nie pogłoski, zgłoś błędy na https://gcc.gnu.org/bugs/ –

Powiązane problemy