MySQL Connector/C++ をビルドすると、Ubuntu sys/byteorder.h と sys/endian.h がありません。

MySQL Connector/C++ をビルドすると、Ubuntu sys/byteorder.h と sys/endian.h がありません。

ソースからビルドする場合、私は初心者であることに注意してください(何度も試してみましたが、ほとんどいつも失敗します)。

Ubuntu 19を実行しているRaspberry Pi 3b用のMySQL Connector / C ++ 8を構築しようとしています。フォローする公式説明すべての前提条件をインストールしました(codecvt_utf8存在が100%不明)。

私のビルドはJDBCとBOOSTを使用しません。ソースからOpenSSL 1.1.1を構築しました。

私が実行しているコマンド(--target install直接追加しましたが、これが問題かどうかわからない):

cmake .
cmake --build . --target install --config Release

AFAIK 次の理由で失敗しました。

CMakeFiles/CMakeTmp/CheckIncludeFile.c:1:10: 致命的なエラー: sys/endian.h: そのファイルまたはディレクトリがありません。

CMakeFiles/CMakeTmp/CheckIncludeFile.c:1:10: 致命的なエラー: sys/byteorder.h: そのファイルまたはディレクトリがありません。

確認してみると/usr/includeディレクトリがありませんsysendian.hすぐ上にあり、まったくbyteorder.h存在しません。

一部のファイルが欠落しているのはなぜですか?


上記のようにここsysUbuntuの他の場所にあります。だから私はこれを実行しました:

ln -s /usr/include/aarch64-linux-gnu/sys /usr/include/sys

ただし、欠落しているファイルは実際にはそのディレクトリにもありません。


走る

find /usr/include -type f -name endian.h
find /usr/include -type f -name byteorder.h

このファイルは実際におよびにあります/usr/include/aarch64-linux-gnu/bits/endian.h/usr/include/aarch64-linux-gnu/asm/byteorder.hリンクする必要がありますか?悪い考えのようです。


フル出力(キャッシュされた進行状況を使用):

[  2%] Built target uuid_gen
[  4%] Building protobuf
[ 27%] Built target protobuf-lite
[ 28%] Building CXX object CMakeFiles/protobuf.dir/protobuf-3.6.1/src/google/protobuf/descriptor.cc.o
c++: fatal error: Killed signal terminated program cc1plus
compilation terminated.
make[5]: *** [CMakeFiles/protobuf.dir/build.make:115: CMakeFiles/protobuf.dir/protobuf-3.6.1/src/google/protobuf/descriptor.cc.o] Error 1
make[4]: *** [CMakeFiles/Makefile2:73: CMakeFiles/protobuf.dir/all] Error 2
make[3]: *** [Makefile:84: all] Error 2
make[2]: *** [cdk/CMakeFiles/build_protobuf.dir/build.make:58: cdk/protobuf/build.stamp] Error 2
make[1]: *** [CMakeFiles/Makefile2:297: cdk/CMakeFiles/build_protobuf.dir/all] Error 2
make: *** [Makefile:130: all] Error 2

完全なエラーログ:

Performing C++ SOURCE FILE Test HAVE_IS_SAME failed with the following output:
Change Dir: /home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp

Run Build Command:"/usr/bin/make" "cmTC_dadf7/fast"
/usr/bin/make -f CMakeFiles/cmTC_dadf7.dir/build.make CMakeFiles/cmTC_dadf7.dir/build
make[1]: Entering directory '/home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp'
Building CXX object CMakeFiles/cmTC_dadf7.dir/src.cxx.o
/usr/bin/c++    -DHAVE_IS_SAME  -std=c++11   -o CMakeFiles/cmTC_dadf7.dir/src.cxx.o -c /home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp/src.cxx
/home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp/src.cxx:1:1: error: ‘::main’ must return ‘int’
    1 | void main() { return is_same<bool,char>::value; }
      | ^~~~
/home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp/src.cxx: In function ‘int main()’:
/home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp/src.cxx:1:22: error: ‘is_same’ was not declared in this scope
    1 | void main() { return is_same<bool,char>::value; }
      |                      ^~~~~~~
/home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp/src.cxx:1:30: error: expected primary-expression before ‘bool’
    1 | void main() { return is_same<bool,char>::value; }
      |                              ^~~~
/home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp/src.cxx:1:30: error: expected ‘;’ before ‘bool’
    1 | void main() { return is_same<bool,char>::value; }
      |                              ^~~~
      |                              ;
/home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp/src.cxx:1:34: error: expected unqualified-id before ‘,’ token
    1 | void main() { return is_same<bool,char>::value; }
      |                                  ^
/home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp/src.cxx:1:35: error: expected unqualified-id before ‘char’
    1 | void main() { return is_same<bool,char>::value; }
      |                                   ^~~~
make[1]: *** [CMakeFiles/cmTC_dadf7.dir/build.make:66: CMakeFiles/cmTC_dadf7.dir/src.cxx.o] Error 1
make[1]: Leaving directory '/home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp'
make: *** [Makefile:121: cmTC_dadf7/fast] Error 2

Source file was:
void main() { return is_same<bool,char>::value; }
Determining if the include file sys/endian.h exists failed with the following output:
Change Dir: /home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp

Run Build Command:"/usr/bin/make" "cmTC_a570b/fast"
/usr/bin/make -f CMakeFiles/cmTC_a570b.dir/build.make CMakeFiles/cmTC_a570b.dir/build
make[1]: Entering directory '/home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_a570b.dir/CheckIncludeFile.c.o
/usr/bin/cc    -o CMakeFiles/cmTC_a570b.dir/CheckIncludeFile.c.o   -c /home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp/CheckIncludeFile.c
/home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp/CheckIncludeFile.c:1:10: fatal error: sys/endian.h: No such file or directory
    1 | #include <sys/endian.h>
      |          ^~~~~~~~~~~~~~
compilation terminated.
make[1]: *** [CMakeFiles/cmTC_a570b.dir/build.make:66: CMakeFiles/cmTC_a570b.dir/CheckIncludeFile.c.o] Error 1
make[1]: Leaving directory '/home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp'
make: *** [Makefile:121: cmTC_a570b/fast] Error 2


Determining if the include file sys/byteorder.h exists failed with the following output:
Change Dir: /home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp

Run Build Command:"/usr/bin/make" "cmTC_e560b/fast"
/usr/bin/make -f CMakeFiles/cmTC_e560b.dir/build.make CMakeFiles/cmTC_e560b.dir/build
make[1]: Entering directory '/home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_e560b.dir/CheckIncludeFile.c.o
/usr/bin/cc    -o CMakeFiles/cmTC_e560b.dir/CheckIncludeFile.c.o   -c /home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp/CheckIncludeFile.c
/home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp/CheckIncludeFile.c:1:10: fatal error: sys/byteorder.h: No such file or directory
    1 | #include <sys/byteorder.h>
      |          ^~~~~~~~~~~~~~~~~
compilation terminated.
make[1]: *** [CMakeFiles/cmTC_e560b.dir/build.make:66: CMakeFiles/cmTC_e560b.dir/CheckIncludeFile.c.o] Error 1
make[1]: Leaving directory '/home/ubuntu/mysql-connector-c++-8.0.18-src/CMakeFiles/CMakeTmp'
make: *** [Makefile:121: cmTC_e560b/fast] Error 2

cmake 3.13.4g
++ 9.2.1
openssl 1.1.1d

ベストアンサー1

C++ コンパイラにメモリが不足しているようです。 makeを使用してビルドするときにスレッドを1つ指定してみてください。たとえば、次のようになります。

$ cd path/to/connector/source
$ mkdir build && cd build
$ cmake .. -DCMAKE_BUILD_TYPE=Release
$ make -j1

(これは…「ソースなし」立てておく)

それでも失敗し、Piにまだ十分なメモリがない場合は、raspi-configツール(ルートとして実行)を使用してPiのメモリ割り当てを調整してGPUにできるだけ少なく割り当て、グラフィックログインを無効にしてメモリ量を増やしてください。コンパイル用のメモリを解放します。その後、変更を適用するには、再起動してコンソールから必要に応じてビルドします。すべてが順調に進んだら、raspi-configそれを再度使用して、以前に変更した設定を元の値に再調整できます。失敗した場合は、メモリがより多くの異なるLinuxシステムでクロスコンパイルされることを検討できます。 Pi用のクロスコンパイルツールチェーンを構築crosstool-ngし、それを使用してCMakeプロジェクトを構築する方法のガイドをここで見つけることができます。https://blog.kitware.com/cross-compiling-for-raspberry-pi/

おすすめ記事