У меня есть библиотеки, которые динамически связывают stdc ++.Я хочу создать новую общую библиотеку с новыми файлами, связать их и статически связать libstdc ++.
Это действительно плохая идея (TM).Когда ваш двоичный файл выполняется в системе с другой версией libstdc++.so.6
, у вас будут коллизии символов (если только вы не будете очень осторожны с тем, чтобы скрыть все соответствующие символы в вашей общей библиотеке), что, вероятно, приведет к очень сложным для отладки сбоям или другимнеопределенное поведение.
Я пытался добавить -static-libstdc ++ к компиляции, но это не работает.Я проверил с помощью ldd, и моя библиотека все еще динамически связана.
Сначала добавление -static-libstdc++
к компиляции не делает ничего .Вам нужно добавить к связывание .
Во-вторых, неясно, что вы запустили ldd
и зависит ли ваша библиотека от других общих библиотек.Если это так, ldd
покажет переходную зависимость от libstdc++
, что вполне ожидаемо.
Чтобы узнать, зависит ли ваша библиотека напрямую от libstdc++.so.6
, сделайте это:
readelf -d yourlib.so | grep 'NEEDED.*libstdc'