![]() |
Пред. тема | След. тема | ||
Форум Программирование под UNIX (Компиляция) | |||
---|---|---|---|
Изначальное сообщение | [ Отслеживать ] |
"Clang vs Gcc: две компиляторных системы в одном дистрибутиве" | +/– | ![]() |
Сообщение от sidtver (ok), 08-Окт-20, 13:50 | ||
Компилятор - это помимо собственно фронтенда/оптимизаций/кодогенератора еще binutils, библиотеки runtime-поддержки и стандартные библиотеки. У gcc - это, например, gas/ld, glibc, libstdc++. По мере своего развития длительное время компилятор clang использовал binutils и библиотеки от компилятора gcc. Но разработчики clang последовательно движутся к полной замкнутости своего проекта. У них есть свой ассемблер (llvm-as), они активно развивают свой линкер, сделали свой аналог libstdc++ с названием libc++ и разрабатывают свой аналог glibc с названием libc. Наличие стандарта C/C++ должно гарантировать компиляцию программ обоими компиляторами, но никак не гарантирует совпадение хедеров из двух разных реализаций библиотек. (Например, errno может быть переменной, а может быть макросом, раскрывающимся в вызов функции и т.д. и т.п.) У двух независимо-разрабатываемых библиотек неизбежно будут библиотеки без бинарной совместимости. | ||
Ответить | Правка | Cообщить модератору |
Оглавление |
Сообщения | [Сортировка по ответам | RSS] |
1. Сообщение от Аноним (-), 08-Окт-20, 15:06 | +/– | ![]() |
Все держу только на gcc и шланги с llvm выпилены напрочь. Но на сколько я знаю, ссылки на библиотечные функции прописаны у эльфов, у меня нет под рукой апы сделаной шлангом но мне что-то подсказывает что там обычный эльф. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Ответы: #16 |
2. Сообщение от Аноним (2), 08-Окт-20, 16:54 | +/– | ![]() |
> В отсутствии стандартов на манглирование, хедеры стандартных библиотек, механизм EH, процессирование шаблонов, ассемблер | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Ответы: #3 |
3. Сообщение от Аноним (-), 08-Окт-20, 17:15 | +1 +/– | ![]() |
| ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #2 Ответы: #4, #7 |
4. Сообщение от Аноним (2), 08-Окт-20, 17:44 | +/– | ![]() |
> Речь то о том что апа под libc.so собранная gcc уже не будет работать и наоборот. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #3 Ответы: #5 |
5. Сообщение от Аноним (5), 08-Окт-20, 18:01 | +/– | ![]() |
| ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #4 Ответы: #6 |
6. Сообщение от Аноним (2), 08-Окт-20, 18:11 | +/– | ![]() |
> Вот инетерсно было бы узнать как там гнутый функционал, есть ли, можно ли на него расчитывать в той реализации от шланга | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #5 |
7.
Сообщение от Павел Отредиез![]() | +/– | ![]() |
>> когда винду успели пересобрать под icc и mingw? | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #3 Ответы: #9 |
8. Сообщение от Аноним (8), 08-Окт-20, 19:05 | +/– | ![]() |
У меня штук 20 разных компиляторов с разными либами стоит, гента. Можно любой системны пакет собрать произвольным системным компилятором любой версии, binutils правда придётся вручную переключать (зачем использовать не последнюю версию?), переключение шланг/гцц вообще без проблем переменной окружения. Проблем не замечал, но я массово и не собираю шлангом -- он всегда хуже при ближайшем рассмотрении (что-то простое он может соптимизировать лучше). Или собрать какой-нибудь пакет и все зависимости с другой libc или вообще для другой архитектуры. В частности, собираю софт для венды, когда я проверял, он потом работал в 7, 8 и 10 на системной libc (без cygwin). | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Ответы: #10 |
9. Сообщение от sidtver (ok), 08-Окт-20, 22:07 | +/– | ![]() |
> Если две разные реализации libc, то их so должны отличаться в названии, | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #7 Ответы: #11 |
10. Сообщение от sidtver (ok), 08-Окт-20, 22:14 | +/– | ![]() |
> binutils | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #8 Ответы: #12 |
11.
Сообщение от Павел Отредиез![]() | +/– | ![]() |
>[оверквотинг удален] | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #9 Ответы: #14 |
12. Сообщение от Аноним (8), 08-Окт-20, 22:22 | +/– | ![]() |
Есть binutils-config, который управляет симлинками на используемую системную версию. Её можно переключать, также как и компилятор по-умолчанию (gcc-config). Но компилятор и линкер можно задать переменными окружения вроде CC и LD. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #10 Ответы: #13, #15 |
13. Сообщение от Аноним (8), 08-Окт-20, 22:25 | +/– | ![]() |
Ещё можно выставить вот эти, но вроде это излишне, и можно спокойно использовать гнутые | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #12 |
14. Сообщение от sidtver (ok), 08-Окт-20, 22:28 | +/– | ![]() |
> Я не говорил, что собирать с одной, а исполнять с другой. Я | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #11 |
15. Сообщение от sidtver (ok), 08-Окт-20, 22:40 | +/– | ![]() |
> Есть binutils-config, который управляет симлинками на используемую системную версию. | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #12 |
16. Сообщение от sidtver (ok), 08-Окт-20, 23:11 | +/– | ![]() |
firefox/rust/llvm | ||
Ответить | Правка | Наверх | Cообщить модератору | ||
Родитель: #1 |
Архив | Удалить |
Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема |
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |