Статически включать libc в программу на C++ с помощью gcc без использования опции -static.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Статически включать libc в программу на C++ с помощью gcc без использования опции -static.

Сообщение Anonymous »

Я пытаюсь создать небольшую программу на C++ с наименьшим количеством динамических зависимостей.
Проблема, с которой я столкнулся, заключается в том, что программа, которую я пытаюсь создать, имеет динамическую зависимость от libmariadbcpp (что невозможно статически связаны).
Т.е. использование опции -static в команде компиляции приводит к сбою компиляции с ошибкой

/usr/bin/ld: попытка статической ссылки динамического объекта `/usr/local/lib/../lib/libmariadbcpp.so'

В настоящее время программа собирается с помощью команды

Код: Выделить всё

gcc main.cpp -o main -lmariadbcpp
Но запуск ldd на основном сервере показывает зависимости от libc.so.6, libm.so.6 и других...
Очевидно, что команда< /p>

Код: Выделить всё

gcc main.cpp -o main -lmariadbcpp -static
не работает, потому что -static переопределяет -lmariadbcpp, но «логически» напоминает то, чего я хотел бы достичь.
Я пробовал использовать -static-libstdc++, но видимого эффекта на созданный двоичный файл не было (libc и libm все еще были в списке ldd).
Есть ли у меня возможность статически скомпилировать мою программу так, чтобы ldd не отображал никаких динамических зависимостей, за исключением libmariadbcpp?
Бонусный вопрос: где определены такие параметры, как -static-libstdc++? Я пытался найти их с помощью --help с gcc и ld, но безрезультатно.
Большое спасибо!
Некоторые дополнительная информация:
Проблема, которую я пытался решить в более широком смысле, заключается в том, что серверы, на которых я работаю, имеют разные дистрибутивы/версии ОС и скомпилированный код. на моем компьютере с динамическими зависимостями не удается выполнить удаленно (с такими ошибками, как /lib/x86_64-linux-gnu/libc.so.6: версия GLIBC_2.34 не найдена).
В настоящее время я либо перекомпилирую программы на каждом сервере или обернуть их в docker-контейнеры, но это не очень практично, поэтому я подумал, что лучше всего удалить динамические зависимости.

Подробнее здесь: https://stackoverflow.com/questions/778 ... tic-option
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»