Я пытаюсь скомпилировать 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