.so аварийно завершает работу при манипуляциях со строками: конфликт между статически связанной libstdc++ и системнойC++

Программы на C++. Форум разработчиков
Anonymous
.so аварийно завершает работу при манипуляциях со строками: конфликт между статически связанной libstdc++ и системной

Сообщение Anonymous »

Я разрабатываю общую библиотеку с помощью C API с использованием C++.
Я компилирую и связываю с помощью:

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

cxxflags=-fPIC -fvisibility=hidden
cflags=-fPIC -fvisibility=hidden
linkflags=-fPIC -static-libstdc++ -static-libgcc
Я использую версию GCC, которую скомпилировал сам, она отличается от той, которая использовалась для сборки моего дистрибутива Linux. Я статически компоную libstdc++ из этого GCC в надежде максимизировать совместимость с различными дистрибутивами Linux (также я компилирую в системе с glibc старше той, с которой он будет работать).
Моя библиотека компилируется и компонуется без ошибок, а набор тестов имеет зеленый цвет. Однако когда я вызываю его из Python (используя ctypes), он может аварийно завершить работу, если некоторые модули Python были импортированы ранее, например greenlet или scikit-learn. Сбой, по-видимому, связан с манипулированием строками: преобразованием чисел в строки.
Как ни странно, если я использую LD_PRELOAD=/lib/x86_64-linux-gnu/libstdc++.so.6 python ... для запуска моего сценария Python, он не дает сбоя (т. е. предварительно загружает libstdc++ из системы).
Такое поведение появилось недавно, возможно, связано с обновлением Linux распространение.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ed-libstdc

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