Поведение сборки gcc при наличии конфликтующей версии openssl - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь собрать мою библиотеку c ++ (которая зависит от facebook / folly ) с помощью gcc7.Некоторые важные моменты, на которые следует обратить внимание

  • Ранее я использовал gcc 4.8 для создания этой библиотеки
  • Поскольку в gcc 5.2 появилась несовместимость ABI - я построил глупость из источника (и всех других зависимыхбиблиотеки, такие как glog и т. д.) с gcc 7 - и я использую обновленные библиотеки и общие объекты.
  • Моя библиотека использует openssl 1.1 (даже ранее, когда она создавалась с помощью gcc 4.8), где глупо (используемая мной версия глупости) использует openssl 1.0.2

Даже при несовместимости версий openssl сборка моей библиотеки прошла бы нормально с gcc 4.8 со следующим предупреждением

/usr/bin/ld: warning: libssl.so.10, needed by /home/<username>/folly/folly/1000.37.2.1/lib/libfolly.so, may conflict with libssl.so.1.1

Я получаю точно такое же предупреждение и с gcc 7, но теперь моя сборка завершается с ошибкой

/usr/bin/ld: /home/<username>/folly/folly/1000.37.2.1/lib/libfolly.a(SSLSessionCacheManager.o): undefined reference to symbol 'SSL_CTX_get_ex_new_index@@libssl.so.10'
/usr/lib64/libssl.so.10: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

Я пытался исследовать эту проблему в отношении DSO, отсутствующего в командной строке - но решения, упомянутые в других вопросах, похоже, не в моем случае.

Есть 3 вопроса, которые я ищуответ здесь

  1. Может ли несовместимость версий openssl быть причиной сбоя сборки?
  2. Почему сборка завершится успешно в gcc 4.8, но не удалась в gcc 7?
  3. есть способ решить эту проблему без обновления версии openssl в глупости (мне придется внести много изменений для этого - что потребует изменений кода с моей стороны).Моя библиотека использует только openssl/md5.h
...