交叉编译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驱动了 

新问题

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要安装MySQL 8.0.22版本,您可以按照以下步骤进行操作: 1. 首先,您需要下载MySQL 8.0.22的安装程序。您可以在MySQL官方网站上找到适用于您的操作系统的安装程序,并将其下载到您的计算机上。 2. 下载完成后,双击安装程序并按照提示进行安装。根据您的操作系统不同,可能会有一些特定的设置选项需要选择。请根据您的需求进行选择,并继安装过程。 3. 在安装过程中,您将被要求设置MySQL的root用户的密码。请确保设置一个强密码,并牢记它,因为它将是您在MySQL中进行管理员操作的凭证。 4. 完成安装后,您需要打开命令行界面(例如Windows的命令提示符或PowerShell)。 5. 在命令行界面中,切换到MySQL的安装目录。根据您的安装路径不同,可能需要使用类似于以下命令的方式进行切换: ``` cd D:\software\mysql\mysql-8.0.22-winx64\bin ``` 6. 接下来,您可以使用以下命令启动MySQL服务器: ``` mysqld ``` 7. 一旦MySQL服务器启动成功,您可以使用以下命令登录到MySQL控制台: ``` mysql -u root -p ``` 8. 您将被要求输入之前设置的root密码。输入密码后,按下回车键即可登录到MySQL控制台。 现在您已经成功安装了MySQL 8.0.22,并登录到了MySQL控制台。您可以在控制台中执行各种MySQL操作和命令来管理和操作数据库。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Mysql备份和恢复](https://blog.csdn.net/xiaoxiamiqianqian/article/details/115360894)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值