Сбой компиляции после установки библиотеки в путь, не включенный в компиляцию - PullRequest
0 голосов
/ 20 марта 2019

Сценарий:

На Debian 8 я установил библиотеку openssl (как runtime, так и dev), версия 1.0.1t.Они были установлены с использованием apt-get.Итак, расположение по умолчанию: /usr/include/ и /usr/lib.

Я скомпилировал файл, который использует библиотеку openssl: (сгенерированный из qmake)

g++ -c -pipe -O2 -fPIC -std=gnu++11 -Wall -W -DHAVE_OPENSSL -D_REENTRANT -DENABLE_IPV6 -DTIXML_USE_STL -DBOOST_FILESYSTEM_DEPRECATED -DQT_NO_DEBUG -I. -I. -Isrc -Isrc/engine -Isrc/gui -Isrc/gui/qt -Isrc/gui/qt/qttools -Isrc/net -Isrc/engine/local_engine -Isrc/engine/network_engine -Isrc/config -Isrc/core -Isrc/third_party/websocketpp -isystem /usr/include -isystem /usr/include/mysql -isystem /usr/include/mysql++ -I/opt/gsasl/include -I~/Qt/5.9.0_static/mkspecs/linux-g++ -o obj/crypthelper.o src/core/common/crypthelper.cpp

Он отлично работает.Обратите внимание, что заголовки /usr/local/ не включены.

Цель:

Сделайте то же самое с использованием openssl 1.1.1b (для воспроизведения ошибки)

Я устанавливаю openssl 1.1.1b из исходного кода (без удаления 1.0.1t),который устанавливается в /usr/local.
Сначала, чтобы убедиться, что ничего не изменилось, я запускаю ту же команду (которая не имеет ссылки на /usr/local), и он жалуется:

In file included from /usr/include/openssl/evp.h:66:0,
                 from /usr/include/openssl/x509.h:73,
                 from /usr/include/openssl/ssl.h:156,
                 from src/core/openssl_wrapper.h:75,
                 from src/core/common/crypthelper.cpp:34:
/usr/local/include/openssl/opensslconf.h:20:3: error: #error OPENSSL_ALGORITHM_DEFINES no longer supported    <---- WHY???
 # error OPENSSL_ALGORITHM_DEFINES no longer supported

Почему этопожаловаться на файл, расположенный в /usr/local?Почему это включает?
Нет ссылки на этот каталог!Я не понимаю

PD: Извините за заголовок, ничего лучше не пришло ко мне.Не стесняйтесь исправить это.

1 Ответ

1 голос
/ 20 марта 2019

/usr/local/include находится в путях поиска по умолчанию для вашего компилятора

Вы можете проверить их, вызвав echo | g++ -E -v -

Вы должны получить вывод, подобный следующему:

...
#include <...> search starts here:
 /usr/lib/gcc/x86_64-linux-gnu/8/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/8/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
...

Передав -isystem /usr/include, вы переместитесь /usr/include в начало списка поиска, и заголовки из openssl 1.0.1 будут найдены первыми.Но <openssl/opensslconf.h> находится в другом месте (для меня это /usr/include/x86_64-linux-gnu/openssl/opensslconf.h), который ищется после /usr/local/include, поэтому сначала найдена версия из openssl 1.1.1.

Это можно исправить, найдя каталог, содержащийисправьте opensslconf.h и измените свою сборку так, чтобы она передавалась с -isystem flag

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...