Сборка MySQL Connector / C ++ из исходного кода с помощью cmake завершается неудачно (конфликтует с предыдущим объявлением) - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь скомпилировать MySQL Connector / C ++ 8.0.12, используя gcc-8.1.0 и cmake 3.6.2, поскольку пакет apt, похоже, скомпилирован для gcc-4.9 и вылетает при использовании с gcc-8.1. 0 скомпилированных программ (но работает с скомпилированными программами gcc-4.9).

Из документации MySQL :

Даже небольшое изменение в версии компилятора может вызвать проблемы. Если вы получаете сообщения об ошибках, которые, как вы подозреваете, связаны с двоичной несовместимостью, соберите Connector / C ++ из исходного кода, используя тот же компилятор и компоновщик, который вы используете для сборки и компоновки своего приложения.

Когда я пытаюсь собрать соединитель из источника, как описано здесь :

git clone https://github.com/mysql/mysql-connector-cpp.git
mkdir cppconn
cd cppconn

cmake /home/pi/mysql-connector-cpp
 # Everything looks fine except for:
Protobuf include path: /home/pi/mysql-connector-cpp/cdk/protobuf/protobuf-2.6.1/src
...
-- Performing Test HAVE_IS_SAME - Failed

cmake --build . --target install --config Debug
 # All lot of warings come up and then:
Scanning dependencies of target protobuf
...
[ 34%] Building CXX object CMakeFiles/protobuf.dir/protobuf-2.6.1/src/google/protobuf/text_format.cc.o
In file included from /home/pi/mysql-connector-cpp/cdk/protobuf/protobuf-2.6.1/src/google/protobuf/text_format.cc:37:
/usr/bin/gcc-8.1.0/include/c++/8.1.0/math.h:65:12: error: ‘constexpr bool std::isinf(double)’ conflicts with a previous declaration
 using std::isinf;
            ^~~~~
In file included from /usr/include/features.h:374,
                 from /usr/bin/gcc-8.1.0/include/c++/8.1.0/arm-linux-gnueabihf/bits/os_defines.h:39,
                 from /usr/bin/gcc-8.1.0/include/c++/8.1.0/arm-linux-gnueabihf/bits/c++config.h:508,
                 from /usr/bin/gcc-8.1.0/include/c++/8.1.0/utility:68,
                 from /usr/bin/gcc-8.1.0/include/c++/8.1.0/algorithm:60,
                 from /home/pi/mysql-connector-cpp/cdk/protobuf/protobuf-2.6.1/src/google/protobuf/text_format.cc:35:
/usr/include/arm-linux-gnueabihf/bits/mathcalls.h:201:1: note: previous declaration ‘int isinf(double)’
 __MATHDECL_1 (int,isinf,, (_Mdouble_ __value)) __attribute__ ((__const__));
 ^~~~~~~~~~~~
In file included from /home/pi/mysql-connector-cpp/cdk/protobuf/protobuf-2.6.1/src/google/protobuf/text_format.cc:37:
/usr/bin/gcc-8.1.0/include/c++/8.1.0/math.h:66:12: error: ‘constexpr bool std::isnan(double)’ conflicts with a previous declaration
 using std::isnan;
            ^~~~~
In file included from /usr/include/features.h:374,
                 from /usr/bin/gcc-8.1.0/include/c++/8.1.0/arm-linux-gnueabihf/bits/os_defines.h:39,
                 from /usr/bin/gcc-8.1.0/include/c++/8.1.0/arm-linux-gnueabihf/bits/c++config.h:508,
                 from /usr/bin/gcc-8.1.0/include/c++/8.1.0/utility:68,
                 from /usr/bin/gcc-8.1.0/include/c++/8.1.0/algorithm:60,
                 from /home/pi/mysql-connector-cpp/cdk/protobuf/protobuf-2.6.1/src/google/protobuf/text_format.cc:35:
/usr/include/arm-linux-gnueabihf/bits/mathcalls.h:234:1: note: previous declaration ‘int isnan(double)’
 __MATHDECL_1 (int,isnan,, (_Mdouble_ __value)) __attribute__ ((__const__));

Требования, изложенные в документации :

  • Компилятор C ++, который поддерживает C ++ 11. В случае gcc это должна быть как минимум версия 4.8. Эти компиляторы были протестированы: gcc 4.8.5, 5.4.0, 6.3.0, 6.3.1, 7.2.1, 7.3.0, 8.1.1, clang 9.0.0, MS Visual Studio 2015. (присутствует ~ 8.1.0)
  • CMake 2.8.12 или более поздняя версия. (присутствует - 3.6.2)
  • Повысить 1.59 или более позднюю версию, если используемая версия стандартной библиотеки C ++ не реализует конвертер UTF8 (codecvt_utf8). Повышение также требуется при сборке устаревшего соединителя (см. Ниже). (насколько мне известно, libstdc ++. So.6.0.25 поддерживает codecvt_utf8)
  • OpenSSL версии 1.0.x, если соединитель построен с OpenSSL. Вместо OpenSSL Connector / C ++ может быть собран с использованием WolfSSL 3.14.0 или новее. (присутствует - 1.0.1)
  • Клиентская библиотека MySQL 8.0 при сборке устаревшего соединителя (см. Ниже). (необязательно)

Дополнительная информация:

  • с использованием Raspberry Pi 2b под управлением Raspbian
  • libstdc ++ версия 6.0.25
  • Кажется, что версия Protobuf 2.6.1 (для сборки)

Заранее спасибо. -Minding

1 Ответ

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

Решением было правильно установить gcc с помощью этой команды:

cp -a gcc-*version*/bin/. /usr/bin/
cp -a gcc-*version*/lib/. /usr/lib/
 # ... (for all sub directories)

, который просто копирует все файлы из исходной папки в папку назначения.

Спасибо @Matthieu Brucher за сообщение, что я установил его неправильно и как правильно его установить.

...