Чи слід використовувати libc ++ або libstdc ++? [зачинено]


91

Я розробляю виконувані файли інтерфейсу командного рядка для osx та linux, використовуючи c / c ++. Проект створить посилання на opencv. Чи слід використовувати libc ++ або libstdc ++?


1
Я не знаю, але це може вас зацікавити: clang-developers.42468.n3.nabble.com/…
DarenW

3
Ця відповідь може бути корисною.
Yantao Xie

2
якщо ви посилаєтеся на opencv, то використовуйте libstdc ++. ось чому stackoverflow.com/questions/13037659 / ...
Loozie

Відповіді:


89

Я б використовував власну бібліотеку для кожної ОС, тобто libstdc ++ на GNU / Linux та libc ++ на Mac OS X.

libc ++ не є на 100% повноцінним на GNU / Linux, і немає реальної переваги у використанні, коли libstdc ++ є більш повним. Крім того, якщо ви хочете зробити посилання на будь-які інші бібліотеки, написані на C ++, вони майже напевно будуть побудовані за допомогою libstdc ++, тому вам доведеться зв’язуватись із цим, щоб їх використовувати.

Детальніше тут про повноту libc ++ на різних платформах.


3
Не могли б ви розробити / надати посилання про стан повноти libc ++ в Linux? Я не зовсім розумію, чому це було б специфічно для платформи, оскільки libc ++ - це лише купа заголовків стандартної бібліотеки. Або ви маєте на увазі, що потрібно створити Clang wrt для бібліотек виконання LLVM, які недостатньо підтримуються в Linux?
TemplateRex

1
@TemplateRex, я не знаю поточного стану, ви можете подивитися на libcxx.llvm.org . Я не підписуюсь libc ++, тож ви запитуєте не ту людину, але чи припускаєте ви, що "купа заголовків стандартної бібліотеки" ніколи не матиме коду, специфічного для платформи?
Джонатан Уейклі

Ну, оскільки ви можете встановити Linux майже на тому самому обладнанні Apple, яке працює під управлінням Mac OS X, цікаво, звідки взялася б залежність платформи в заголовках C ++? Можливо, деякі обгортки навколо вбудованих властивостей центрального процесора або IO та матеріалів для обробки винятків залежать від системи, але я розумів, що такі речі обробляються у бінарних шарах типу librcxxrt. Хіба заголовки Стандартної бібліотеки не повинні бути більш-менш підключеними?
TemplateRex

4
Я вже не кажу про обладнання. Знову ж таки, я поняття не маю про libc ++, але більшість стандартних бібліотек C ++ реалізовані через бібліотеку C ОС, і, наприклад, відображення std::ctype_base::maskзначень у <ctype.h>константи повністю залежить від платформи. (Внутрішні характеристики процесора забезпечуються компілятором, обробка винятків здійснюється низькорівневим рівнем ABI, але IO зазвичай виконується повністю в бібліотеках C ++ та C, а не на низькорівневих матеріалах).
Джонатан Уейклі

1
@abergmeier, це помилковий аргумент, оскільки (при використанні з GCC чи іншими прийнятними процесами компіляції) libstdc ++ не накладає жодних обмежень на використання його коду, будь то динамічно чи статично. Це не LGPL. Будь ласка, не поширюйте FUD. gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.license.what
Джонатан Уейклі

30

Основні дистрибутиви Linux не надають LLVM libc ++, оскільки:

  1. На відміну від Apple та FreeBSD, GPL + 3 не є проблемою, тому немає необхідності застосовувати інший стек тут.
  2. Компоненти Linux розроблялися довкола GNU libstd ++. Деякі з них не будують ні на чому іншому.
  3. Хоча libc ++ є потужним у нових функціях, він має деякі проблеми із застарілим кодом.

Якщо з часом libc ++ став частиною дистрибутивів, це буде додатковим компонентом. посилання проти нього, ймовірно, потребуватиме додаткових опцій.

Як сказав Джонатан, ви повинні використовувати будь-який інструмент, включений за замовчуванням. Clang безпечний у використанні в Linux, оскільки налаштований як заміна GCC, тому в цьому аспекті вам не доведеться турбуватися про 2 компілятора. Крім того, оскільки ви націлюєтеся на дві платформи, вам слід поглянути на cmake.


2
Clang - це не заміна GCC ... Просто ще один компілятор.
Ісаак Паскуаль

4
@IsaacPascual Те, що Маріо мав на увазі clang, офіційно має в цілях дизайну бути заміною видатного компілятора на платформі, на якій ви його запускаєте (наприклад, gcc, коли працює на Linux). Те саме для компілятора Intel afaik. Це їх спосіб отримати більш широке усиновлення.
Йохан Буле,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.