Debian gcc нежелательное поведение - PullRequest
0 голосов
/ 07 ноября 2018

Я создаю разделяемую библиотеку 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! Или есть способ, который я могу понять, если есть проблема в общей библиотеке.

1 Ответ

0 голосов
/ 07 ноября 2018

В комментариях вы указываете, что проблема с #define. Это директивы препроцессора . Библиотеки для компоновщика .

Вы можете быть смущены, потому что g++ включает фазу препроцессора и может вызвать компоновщик в зависимости от запрошенного вывода. Тем не менее, g++ следует правилам языка C ++.

...