#linux #g
#linux #g
Вопрос:
У меня есть проект на C , который я в настоящее время создаю, используя динамическую привязку к различным системным библиотекам. Это в системе RHEL 7. Я использовал devtoolset-9, чтобы получить более современную версию g (системная, я думаю, 4.8.5). Все это работает нормально, но теперь я хотел бы создать статический исполняемый файл, который я смогу запускать в системе Linux, отличной от RHEL. Я попытался указать -static-libstdc , но, похоже, он все еще динамически связан, глядя на вывод ldd. Я читал, что компиляторы devtoolset используют некоторые хитрости во время соединения для динамической привязки как к системе libstdc , так и к любой новой функциональности C статически. Это правда? У меня это не работает; если я скопирую исполняемый файл в систему, отличную от RHEL, и попытаюсь запустить его, я получу кучу подобных вещей (из памяти, так что, надеюсь, правильно):
/lib64/libstdc .so.6: версия `GLIBCXX_3.4.21′ не найдена
Есть ли какой-либо способ создать полностью статический исполняемый файл с использованием g из devtoolset-9? Спасибо.
Комментарии:
1. Я не был уверен, какой форум лучше всего подходит для этого вопроса. Совет приветствуется.
2. -static-libstdc использовал libstdc для статической связи, он не создает статический исполняемый файл. Если у вас есть другие разделяемые библиотеки C , то они будут использовать общий libstdc независимо от исполняемого файла, поэтому вам придется ссылаться на статические версии этих библиотек или перестраивать их без привязки к libstdc .
3. Ах, это действительно имеет смысл. Спасибо.