首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在构建MySQL连接器/C++时,缺少Ubuntu /byorder.h& sys/endian.h .h

在构建MySQL连接器/C++时,缺少Ubuntu /byorder.h& sys/endian.h .h
EN

Unix & Linux用户
提问于 2019-12-30 18:08:30
回答 1查看 3.1K关注 0票数 0

请记住,我是一个初学者,当涉及到从源头构建(尝试了几次,几乎总是失败)。

我试图为运行Ubuntu 19的Raspberry 3b构建MySQL连接器/C++8。我遵循官方指示并安装了所有先决条件(不是100%确定codecvt_utf8是否存在)。

我正在构建没有JDBC和BOOST。我已经从源代码构建了OpenSSL 1.1.1。

我正在运行的命令(我直接添加了--target install -不确定这是否是一个问题):

代码语言:javascript
运行
复制
cmake .
cmake --build . --target install --config Release

它失败了AFAIK,因此:

CMakeFiles/CMakeTmp/CheckIncludeFile.c:1:10:致命错误:sys/endian.h.h:没有这样的文件或目录CMakeFiles/CMakeTmp/CheckIncludeFile.c:1:10:致命错误:sys/byorder.h:没有这样的文件或目录

我检查了/usr/include,没有目录sysendian.h直接位于顶层,而byteorder.h根本不存在.

为什么有些文件不见了?

正如前面提到的这里sys目录位于Ubuntu上的不同位置。所以我做了这个:

代码语言:javascript
运行
复制
ln -s /usr/include/aarch64-linux-gnu/sys /usr/include/sys

但丢失的文件实际上也不在该目录中。

正在运行

代码语言:javascript
运行
复制
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中,我应该直接链接这些文件吗?似乎是个坏主意。

完全输出(使用缓存的进度):

代码语言:javascript
运行
复制
[  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

全错误日志:

代码语言:javascript
运行
复制
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::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::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::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::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::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::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::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 
      |          ^~~~~~~~~~~~~~
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 
      |          ^~~~~~~~~~~~~~~~~
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.4 g++ 9.2.1 openssl 1.1.1d

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-01-01 21:19:01

C++编译器似乎内存不足。使用make构建时,尝试指定1个线程,例如:

代码语言:javascript
运行
复制
$ cd path/to/connector/source
$ mkdir build && cd build
$ cmake .. -DCMAKE_BUILD_TYPE=Release
$ make -j1

(这称为“无源”构建)

如果失败了,而且Pi仍然没有足够的内存,请使用raspi-config工具(以根用户身份运行)来调整Pi的内存分割,给GPU提供尽可能少的内存,并禁用图形登录,尝试增加用于编译的空闲内存量。然后,重新启动以使更改生效,然后像从控制台构建一样。如果一切顺利,那么您可以再次使用raspi-config将先前修改的设置调整回原来的值。如果失败,那么您可能需要考虑在另一台具有更多内存的Linux机器上交叉编译。关于如何使用crosstool-ng为Pi构建交叉编译工具链,然后使用它构建CMake项目的指南可以在这里找到:https://blog.kitware.com/cross-compiling-for-raspberry-pi/

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/559575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档