Я создаю разделяемую библиотеку gcc со статической зависимостью библиотеки.
Я компилирую части для статической библиотеки следующим образом:
gcc -c -m64 -O2 -fPIC -std=c99 -Wall ms*.c //there are 10 C files, no warnings
Далее я создаю статическую библиотеку с:
ar rc static_lib.a ms*.o
Далее я компилирую части для моей программы следующим образом:
g++ -c -m64 -O2 -fPIC -std=c++14 -Wall ab*.cpp //there are 5 C++ files, just -Wunused-variable warnings
Затем я создаю общую библиотеку следующим образом:
g++ -shared -g -Wall ab*.o static_lib.a -o shared_lib.so
в обычном случае этот shared_lib.so будет вызываться программой Ruby с использованием интерфейса сторонней функции. Нет проблем, если я сделаю это на Ubuntu или Mac (.dylib), но если я попробую это на Debian Stretch, я получаю ошибку , связанную со статической библиотекой , как будто конфигурации не установлены должным образом. Если я запускаю приложение без стороннего интерфейса функций, такого как создание тестера и запуск с основной функцией файла cpp, как показано ниже:
> g++ -o library_test ab*.o static_lib.a
> ./library_test
Нет проблем!
У меня вопрос, какая конфигурация для создания разделяемой библиотеки может отсутствовать здесь, чтобы не получить такого нежелательного поведения. Особенно на Debian Stretch 9,5!
Или есть способ, который я могу понять, если есть проблема в общей библиотеке.