Совместно используемая библиотека C ++ дает исключение с плавающей запятой при связывании с приложением C - PullRequest
0 голосов
/ 13 марта 2019

Справочная информация:

Библиотека C ++ для etcd client, имеющая API для взаимодействия с etcd server, чтобы использовать эту библиотеку в приложении C, мы написали оболочки C ++ поверх этой библиотеки, чтобыон может быть вызван приложением C.

Создал общую библиотеку с помощью следующей команды:

g++-7 -ggdb -fPIC -shared -o libetcd_c++.so etcd_client_wrapper.cc etcd_client_txn_wrapper.cc etcd_client.cc etcd_client_txn.cc utils/string.cc pb/*.cc -std=c++1z -I ./pb/etcd -rdynamic -Wl,-call_shared -lglog -lprotobuf -lgrpc++ -lgrpc -Wl,-call_shared -lpthread -ldl -lc

поместил эту библиотеку в путь к библиотеке по умолчанию /usr/local/lib и загрузил библиотеку с sudo ldconfig.

Теперь, используя эту библиотеку API etcd_c++, написал код C для вставки простого значения ключа в etcd keyspace.Скомпилировано с использованием следующей команды:

gcc -ggdb -o cwrap sample_wrapper.c -rdynamic -pthread -static-libstdc++ -Wl,-non_shared -lglog -lprotobuf -pthread -lz -lgrpc++ -lprotobuf -lgrpc -lz -lcares -lssl -lcrypto -lunwind -llzma -lgflags -Wl,-call_shared -lpthread -ldl -letcd_c++ -lstdc++

Компиляция идет хорошо.Но при выполнении полученного двоичного файла это дает исключение с плавающей запятой в библиотеке grpc++.

Вопросы:

  1. Какое отношение floating point exception имеет к библиотеке?
  2. Мы подумали, что это может быть проблема с переходом с C на C ++, но при преобразовании того же кода C в C ++ с тем же API-оболочкой.Дает floating point exception .Now. Если мы заменим API-оболочку на прямой API библиотеки grpc++, в коде C ++ он будет работать нормально.Это проблема со связыванием?

Компиляция приложения C ++:

g++-7 -ggdb -o wrap example.cc -std=c++1z -rdynamic -pthread -static-libstdc++ -Wl,-non_shared -lglog -lprotobuf -pthread -lz -lgrpc++ -lprotobuf -lgrpc -lz -lcares -lssl -lcrypto -lunwind -llzma -lgflags -Wl,-call_shared -lpthread -ldl -letcd_c++

EDIT : Некоторые выводы, https://bugs.launchpad.net/ubuntu/+source/grpc/+bug/1797000

ХотяМы не используем опцию -Wl,-Bsymbolic-functions, но проблема в чем-то похожа на описанную выше.

...