交叉编译mysql8.0.22全过程(续)

错误:

/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/7.5.0/../../../../aarch64-linux-gnu/bin/ld: cannot find -ltirpc

collect2: error: ld returned 1 exit status

make[2]: *** [unittest/gunit/group_replication/CMakeFiles/group_replication_member_version-t.dir/build.make:101: runtime_output_directory/group_replication_member_version-t] Error 1

make[1]: *** [CMakeFiles/Makefile2:20161: unittest/gunit/group_replication/CMakeFiles/group_replication_member_version-t.dir/all] Error 2

make[1]: *** Waiting for unfinished jobs....

[ 49%] Linking CXX executable ../../../../plugin_output_directory/dynamic_loader-t

[ 49%] Built target dynamic_loader-t

[ 49%] Linking CXX executable ../../../runtime_output_directory/group_replication_compatibility_module-t

/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/7.5.0/../../../../aarch64-linux-gnu/bin/ld: cannot find -ltirpc

collect2: error: ld returned 1 exit status

make[2]: *** [unittest/gunit/group_replication/CMakeFiles/group_replication_compatibility_module-t.dir/build.make:101: runtime_output_directory/group_replication_compatibility_module-t] Error 1

make[1]: *** [CMakeFiles/Makefile2:20235: unittest/gunit/group_replication/CMakeFiles/group_replication_compatibility_module-t.dir/all] Error 2

[ 49%] Linking CXX executable ../../../runtime_output_directory/group_replication_mysql_version_gcs_protocol_map-t

/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/7.5.0/../../../../aarch64-linux-gnu/bin/ld: cannot find -ltirpc

collect2: error: ld returned 1 exit status

make[2]: *** [unittest/gunit/group_replication/CMakeFiles/group_replication_mysql_version_gcs_protocol_map-t.dir/build.make:101: runtime_output_directory/group_replication_mysql_version_gcs_protocol_map-t] Error 1

make[1]: *** [CMakeFiles/Makefile2:20198: unittest/gunit/group_replication/CMakeFiles/group_replication_mysql_version_gcs_protocol_map-t.dir/all] Error 2

make: *** [Makefile:163: all] Error 2

user@user-virtual-machine:~/Downloads/mysql-8.0.22/build_arm64$

// 太多找不到-ltirpc,35个link.txt中有"-ltirpc"

解决:

Shell 教程 | 菜鸟教程 (runoob.com)

# 写了一个脚本,locate所有绝对路径中有”build_arm64“的link.txt文件,将文件中的”-ltirpc“替换成一个空格

#!/bin/sh
# stop when error occurs

echo "hello"
# say hello

count_del=0
delLtirpcInCopy(){

# del all -ltirpc of files under build_arm64
for filename in `locate link.txt | grep build_arm64`; do
 ouput=`cat ${filename} | grep ltirpc`
 # if file have ltirpc
 if [ ${#ouput} -gt 0 ]; then
  # print filename
  echo ${filename}
  echo "before del"
  # print file's content bef del -ltirpc
  cat ${filename} | grep ltirpc
  sed -i 's/-ltirpc//g' ${filename}
  echo "after del"
  # print file's content aft del -ltirpc
  cat ${filename}
  # count file need to be del -ltirpc
  count_del=`expr ${count_del} + 1`
 fi
done

}

delLtirpcInCopy

echo "${count_del} -ltirpc is deleted"

错误:

/bin/sh: 1: gen_lex_token: not found

解决:

user@user-virtual-machine:~$ sudo cp /home/user/Downloads/mysql-8.0.22/build_x86/runtime_output_directory/protoc /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/

错误:

[ 62%] Running protocol buffer plugin on all 'proto' files

/home/user/Downloads/mysql-8.0.22/build_arm64/runtime_output_directory/xprotocol_plugin: program not found or is not executable

Please specify a program using absolute path or make sure the program is available in your PATH system variable

--yplg_out: protoc-gen-yplg: Plugin failed with status code 1.

make[2]: *** [plugin/x/protocol/plugin/CMakeFiles/xprotocol_tags.dir/build.make:62: plugin/x/generated/xprotocol_tags.h] Error 1

make[1]: *** [CMakeFiles/Makefile2:8598: plugin/x/protocol/plugin/CMakeFiles/xprotocol_tags.dir/all] Error 2

make[1]: *** Waiting for unfinished jobs....

解决:

user@user-virtual-machine:~$ file /home/user/Downloads/mysql-8.0.22/build_arm64/runtime_output_directory/xprotocol_plugin

/home/user/Downloads/mysql-8.0.22/build_arm64/runtime_output_directory/xprotocol_plugin: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=300ac473c58cf9c77ed6c5d7b5ae6919651aa17e, with debug_info, not stripped

user@user-virtual-machine:~$ cp /home/user/Downloads/mysql-8.0.22/build_x86/runtime_output_directory/xprotocol_plugin /home/user/Downloads/mysql-8.0.22/build_arm64/runtime_output_directory/xprotocol_plugin

// 把x86版本的xprotocol_plugin拷贝到build_arm64目录下去了

 

错误:

/home/user/Downloads/mysql-8.0.22/storage/innobase/buf/buf0buf.cc: In function ‘void buf_pool_create(buf_pool_t*, ulint, ulint, std::mutex*, dberr_t&)’:

/home/user/Downloads/mysql-8.0.22/storage/innobase/buf/buf0buf.cc:1222:44: error: ‘SYS_gettid’ was not declared in this scope

   setpriority(PRIO_PROCESS, (pid_t)syscall(SYS_gettid), -20);

                                            ^~~~~~~~~~

/home/user/Downloads/mysql-8.0.22/storage/innobase/buf/buf0buf.cc:1222:44: note: suggested alternative: ‘my_getwd’

   setpriority(PRIO_PROCESS, (pid_t)syscall(SYS_gettid), -20);

                                            ^~~~~~~~~~

                                            my_getwd

make[2]: *** [storage/innobase/CMakeFiles/innobase.dir/build.make:232: storage/innobase/CMakeFiles/innobase.dir/buf/buf0buf.cc.o] Error 1

make[2]: *** Waiting for unfinished jobs....

make[1]: *** [CMakeFiles/Makefile2:6059: storage/innobase/CMakeFiles/innobase.dir/all] Error 2

make: *** [Makefile:163: all] Error 2

解决:

buf0buf.cc:1221:44: error: ‘SYS_gettid’ was not declared in this scope_刘海林 (lhl.zone)

// 添加头文件 #include "sys/syscall.h"

错误:

/home/user/Downloads/mysql-8.0.22/storage/innobase/lock/lock0lock.cc: In function ‘void lock_mark_trx_for_rollback(hit_list_t&, trx_id_t, trx_t*)’:

/home/user/Downloads/mysql-8.0.22/storage/innobase/lock/lock0lock.cc:1228:9: error: ‘os_compare_and_swap_thread_id’ was not declared in this scope

   cas = os_compare_and_swap_thread_id(&trx->killed_by, 0, thread_id);

         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/home/user/Downloads/mysql-8.0.22/storage/innobase/lock/lock0lock.cc:1228:9: note: suggested alternative: ‘os_compare_and_swap_lint’

   cas = os_compare_and_swap_thread_id(&trx->killed_by, 0, thread_id);

         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

         os_compare_and_swap_lint

解决:

centos7源码安装mysql8.0_CentOS 7 源码编译安装MySQL 8.0_学术与青椒的博客-CSDN博客

# 将"os_compare_and_swap_thread_id” 修改为 "os_compare_and_swap_lint"

编译成功留念

[100%] Building 生成交叉编译版本的mysql驱动CXX object unittest/gunit/CMakeFiles/merge_large_tests-t.dir/__/__/storage/example/ha_example.cc.o

[100%] Linking CXX executable ../../runtime_output_directory/merge_large_tests-t

[100%] Built target merge_large_tests-t

user@user-virtual-machine:~/Downloads/mysql-8.0.22/build_arm64$ date

2023年 08月 08日 星期二 09:10:11 CST

user@user-virtual-machine:~/Downloads/mysql-8.0.22/build_arm64$

交叉编译出的qt调用的mysql驱动

SQL Database Drivers | Qt SQL 5.15.14

 # 为mysql编译驱动

user@user-virtual-machine:~/Qt5.12.10/5.12.10/Src/qtbase/src/plugins/sqldrivers$ /opt/qt-5.12.10-linux-aarch64-gcc/bin/qmake -- MYSQL_INCDIR="/home/user/mysql-8.0.22_arm64/__install/include" MYSQL_LIBDIR="/home/user/mysql-8.0.22_arm64/__install/lib"

// 配置

Info: creating stash file /home/user/Qt5.12.10/5.12.10/Src/qtbase/src/plugins/sqldrivers/.qmake.stash

Running configuration tests...

Checking for DB2 (IBM)... no

Checking for InterBase... no

Checking for MySQL... yes

Checking for OCI (Oracle)... no

Checking for ODBC... no

Checking for PostgreSQL... no

Checking for SQLite (version 2)... no

Checking for TDS (Sybase)... no

Done running configuration tests.

Configure summary:

Qt Sql Drivers:

  DB2 (IBM) .............................. no

  InterBase .............................. no

  MySql .................................. yes

  OCI (Oracle) ........................... no

  ODBC ................................... no

  PostgreSQL ............................. no

  SQLite2 ................................ no

  SQLite ................................. yes

    Using system provided SQLite ......... no

  TDS (Sybase) ........................... no

Qt is now configured for building. Just run 'make'.

Once everything is built, you must run 'make install'.

Qt will be installed into '/opt/qt-5.12.10-linux-aarch64-gcc'.

Prior to reconfiguration, make sure you remove any leftovers from

the previous build.

user@user-virtual-machine:~/Qt5.12.10/5.12.10/Src/qtbase/src/plugins/sqldrivers$ make -j4

// 编译

user@user-virtual-machine:~/Qt5.12.10/5.12.10/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers$ ll

total 1332

drwxrwxr-x 2 user user    4096 8月   8 17:36 ./

drwxrwxr-x 3 user user    4096 8月   8 17:36 ../

-rwxrwxr-x 1 user user 1190944 8月   8 17:36 libqsqlite.so*

-rwxrwxr-x 1 user user  160904 8月   8 17:36 libqsqlmysql.so*

user@user-virtual-machine:~/Qt5.12.10/5.12.10/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers$ file libqsqlmysql.so

libqsqlmysql.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, BuildID[sha1]=3a4f9abc29e9b0058fe001432fe01126513b7b34, with debug_info, not stripped

user@user-virtual-machine:~/Qt5.12.10/5.12.10/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers$

// 此时arm64版本的mysql驱动已经被编译出来了

远程debug检查驱动是否可用

(38条消息) Linux-gdb调试方式一(QT远程调试开发板应用)_linux中qt远程控制程序_Paper_Love的博客-CSDN博客

https://www.youtube.com/watch?v=_tk6qhnub9c

Gdb-multiarch版本

Qtcreator的版本

新建wiget项目 

 # 下断点

 

 # F5

# qt还是没识别到mysql的驱动

# 需要将刚刚编译出来的arm64版本的 libqsqlmysql.so拷贝到arm64机器上的文件"/usr/lib/aarch64-linux-gnu/qt5/plugins"中

再次F5 

 

# qt已经能加载mysql驱动了 

新问题

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值