Size: a a a

2020 September 09

AS

Ayaz Salikhov in pro.cxx
Valentin Kornienko
По идее, если вы не перекидываете типы, которые завязыны на СТД и она влинковала в себя рантайм- нормально должно быть
Я вот так же думаю 🙂 А что ты подразумеваешь под "влинковала в себя рантайм"?
источник

VK

Valentin Kornienko in pro.cxx
Ayaz Salikhov
Я вот так же думаю 🙂 А что ты подразумеваешь под "влинковала в себя рантайм"?
Если сторонняя динамическая библиотека собрана с статическим рантаймом, а на границе между вашим кодом и кодом сторонней библиотеки летают только простые типы без привязки к стандартной библиотеке- ничего страшного случится не должно.
источник

PS

Pavel Samolysov in pro.cxx
Коллеги, тут смотрю посылают в supapro.cxx, чем эти две конференции отличаются?
источник

VK

Valentin Kornienko in pro.cxx
Другой момент, что если между вашим кодом и кодом библиотеки будет летать std:: string например.
источник

VK

Valentin Kornienko in pro.cxx
Pavel Samolysov
Коллеги, тут смотрю посылают в supapro.cxx, чем эти две конференции отличаются?
Супапро это чат для новичков/простых вопросов по синтаксису и рядом с ними
источник

AS

Ayaz Salikhov in pro.cxx
Не, вот летают как-раз вроде только структурки несложные
источник

AS

Ayaz Salikhov in pro.cxx
А как можно проверить что "собрана со статическим рантаймом"?
источник

AS

Ayaz Salikhov in pro.cxx
В ldd есть libstdc++ 🙁
источник

VK

Valentin Kornienko in pro.cxx
Ayaz Salikhov
В ldd есть libstdc++ 🙁
Значит, рантайм она хочет динамический
источник

AS

Ayaz Salikhov in pro.cxx
То есть по факту тогда нет шансов запуститься?
источник

PS

Pavel Samolysov in pro.cxx
Valentin Kornienko
Супапро это чат для новичков/простых вопросов по синтаксису и рядом с ними
Спасибо
источник

VK

Valentin Kornienko in pro.cxx
Ayaz Salikhov
То есть по факту тогда нет шансов запуститься?
Маловероятно
источник

AS

Ayaz Salikhov in pro.cxx
Понял, спасибо :(
источник

PS

Pavel Samolysov in pro.cxx
Ayaz Salikhov
Привет)

Билжу свой код под Linux с помощью clang используя стандартную либу libstdc++.

Хочу теперь попробовать сбилдить всё с помощью -stdlib=libc++.

1. Обязательно ли линкеру проставлять тоже этот флаг? У кланга во всех примерах они по факту сразу билдят один файл, поэтому непонятно.

2. У меня есть сторонняя либа без сорцов. Динамическая и зависит от libstdc++. Правильно ли я понимаю, что если я у этой либы использую только публичный интерфейс и там нет ничего из std::, то всё будет норм?
Я так понял, что -stdlib=libc++ в ключах компилятору - это указание не использовать стандартные заголовочные файлы, а брать их из libc++, а этот же ключ линкеру - линковаться с libc++. Я проверил с помощью Bazel, если указать этот флаг только в BAZEL_CXXOPTS то компилирует с заголовочными файлами из libc++, а линкует с libstdc++ (ну и ругается, что многие определения не найдены), если добавить в BAZEL_LINKLIBS путь к libc++, то получившийся бинарник зависит и от libstdc++, и от libc++. Флаг BAZEL_LINKOPTS="--stdlib=libc++" необходим, чтобы собрать бинарник, не зависящий от libstdc++
источник

AS

Ayaz Salikhov in pro.cxx
Интересно, я убрал зависимость от либ c libstdc++, проставил в смейке только ключ компиляции и не ставил линковки и всё подменилось, как ни странно 🙂
источник

AS

Ayaz Salikhov in pro.cxx
Но в целом я понял, что правильно ставить, спасибо большое!
источник

PS

Pavel Samolysov in pro.cxx
Так как clang/clang++ это просто драйвера, а ключ --stdlib=libc++ один, то скорее всего зависит от системы сборки, как она вызывает драйвер и когда именно подставляет этот ключ.
источник

SE

Stanislav Ershov in pro.cxx
Pavel Samolysov
Так как clang/clang++ это просто драйвера, а ключ --stdlib=libc++ один, то скорее всего зависит от системы сборки, как она вызывает драйвер и когда именно подставляет этот ключ.
под виндой clang-cl классно работает, clang проверяет заканчивается ли .ехе на -cl и включает доп опции
источник

PS

Pavel Samolysov in pro.cxx
Еще он умеет искать по реестру где у тебя установлена стандартная библиотека от MSVC, использовал этот код, чтобы из своего приложения вызвать clang и сделать этакий JIT на c++
источник

IK

Ivan Koliesnik in pro.cxx
Pavel Samolysov
Так как clang/clang++ это просто драйвера, а ключ --stdlib=libc++ один, то скорее всего зависит от системы сборки, как она вызывает драйвер и когда именно подставляет этот ключ.
clang/clang++ - это не драйвера, проверьте источник, и улюч не вызывает драйвер а только указывает какую линковать стандартную либу
прошу если не знаете, то не говорите того чего не знаете, люди то могут поверить...
источник