.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
Ответить

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

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

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

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

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