Привет)
Билжу свой код под 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++