错误:
/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"
解决:
# 写了一个脚本,locate所有绝对路径中有”build_arm64“的link.txt文件,将文件中的”-ltirpc“替换成一个空格
#!/bin/sh
# stop when error occursecho "hello"
# say hellocount_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驱动了
新问题