Проблема, с которой я столкнулся, заключается в том, что программа, которую я пытаюсь создать, имеет динамическую зависимость от libmariadbcpp (что невозможно статически связаны).
Т.е. использование опции -static в команде компиляции приводит к сбою компиляции с ошибкой
/usr/bin/ld: попытка статической ссылки динамического объекта `/usr/local/lib/../lib/libmariadbcpp.so'
В настоящее время программа собирается с помощью команды
Код: Выделить всё
gcc main.cpp -o main -lmariadbcpp
Очевидно, что команда< /p>
Код: Выделить всё
gcc main.cpp -o main -lmariadbcpp -static
Я пробовал использовать -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