Как установить ссылку на libstdc ++ на статическую, если другая ссылка на библиотеку stdc ++ является динамической? - PullRequest
1 голос
/ 25 сентября 2019

У меня есть библиотеки, которые динамически связывают stdc++.Я хочу создать новую общую библиотеку с новыми файлами, связать их и статически связать libstdc++.

Я попытался добавить -static-libstdc++ к компиляции, но это не работает.Я проверил с помощью ldd, и моя библиотека все еще динамически связана.

Как я могу это сделать?

1 Ответ

1 голос
/ 26 сентября 2019

У меня есть библиотеки, которые динамически связывают stdc ++.Я хочу создать новую общую библиотеку с новыми файлами, связать их и статически связать libstdc ++.

Это действительно плохая идея (TM).Когда ваш двоичный файл выполняется в системе с другой версией libstdc++.so.6, у вас будут коллизии символов (если только вы не будете очень осторожны с тем, чтобы скрыть все соответствующие символы в вашей общей библиотеке), что, вероятно, приведет к очень сложным для отладки сбоям или другимнеопределенное поведение.

Я пытался добавить -static-libstdc ++ к компиляции, но это не работает.Я проверил с помощью ldd, и моя библиотека все еще динамически связана.

Сначала добавление -static-libstdc++ к компиляции не делает ничего .Вам нужно добавить к связывание .

Во-вторых, неясно, что вы запустили ldd и зависит ли ваша библиотека от других общих библиотек.Если это так, ldd покажет переходную зависимость от libstdc++, что вполне ожидаемо.

Чтобы узнать, зависит ли ваша библиотека напрямую от libstdc++.so.6, сделайте это:

readelf -d yourlib.so | grep 'NEEDED.*libstdc'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...