rk3568 , buildroot , qt ,使用sqlite, 动态库, 静态库

问题说明: 客户反馈 ,buildroot 系统 ,使用qt 使用sqlite ,有报错,无法使用sqlite.

测试情况说明: 我自己测试,发现, buildroot 自己默认就是 使能了 sqlite 的。

是否解决说明: 已解决

解决问题的逻辑:

1、首先在buildroot 中使能 sqlite3 , 看看使用命令行不行。

2、 然后写一个C语言看看,能不能使用 sqlite.

3 、然后就是 看看能不能在qt中使用C语言 操作 sqlite 。

4、 然后就是 使用 qt 的自带 的 sqlite 的库了。

方法依据:没有依据,就是测试,正好学习一下 sqlite

解决问题的过程:

疑问: 就是 普通的 sqlite 库 与 qt 自带的 sqlite 的库要怎么选择呢?

有什么区别呢?

疑问: 并且我发现, SDK 中编译好 buildroot 后, 在

rk356x_linux/buildroot/output/rockchip_rk3568/target/usr

目录下 是没有头文件的。

但是将系统烧写到 板卡之后,这个目录 又出现了。

这个问题先不管了。

先继续往下分析。

软件说明: 网盘上的 linux SDK

硬件说明:  核心板V1.1  +底板V1.7

流程开始:

先说一下我遇到的问题,首先 我是使用的是 3568 的SDK先编译一遍 buildroot 系统。

里面就编译了 sqlite3 的第三方包。

然后,我写了一个简短的 C的 对 sqlite 的测试程序。

代码如下:

复制代码
  1 #include <sqlite3.h>
  2 #include <stdio.h>
  3 #include <stdlib.h>
  4
  5
  6 int main(int argc, const char *argv[])
  7 {
  8  sqlite3 * dbSql;
  9 int ret;
 10 char * err;
 11 char ** dataSql;
 12 int n,m,i,j;
 13 char sql[50] = "select * from demo";
 14 if(0 != (ret = sqlite3_open("/root/demo.db",&dbSql))){
 15 printf("open db %s\n",sqlite3_errmsg(dbSql));
 16 exit(1);
 17 }
 18 if(0 != sqlite3_get_table(dbSql,sql,&dataSql,&n,&m,&err)){
 19 printf("get error: %s\n",err);
 20 }
 21 if(0 != n){
 22 for(i=0;i<n+1;i++){
 23 for(j=0;j<m;j++){
 24 printf("%s ",*dataSql);
 25 dataSql++;
 26 }
 27 printf("\n");
 28 }
 29 }else{
 30 printf("Empty!\n");
 31 }
 32 sqlite3_close(dbSql);
 33 return 0;
 34 }
 35
 36
 37
~

我说交叉编译一下吧, 但是报错了。

我的编译命令是这个。

复制代码
aarch64-linux-gnu-gcc -I /home/topeet/source_code/rk356x_linux/buildroot/output/rockchip_rk3568/build/sqlite-3210000/ -L /home/topeet/source_code/rk356x_linux/buildroot/output/rockchip_rk3568/build/sqlite-3210000/.libs/  -o test_sqlite sqlite_test.c  -lsqlite3

报错如下:

复制代码
root@ubuntu:/home/topeet/source_code# aarch64-linux-gnu-gcc -I /home/topeet/source_code/rk356x_linux/buildroot/output/rockchip_rk3568/build/sqlite-3210000/ -L /home/topeet/source_code/rk356x_linux/buildroot/output/rockchip_rk3568/build/sqlite-3210000/.libs/  -o test_sqlite sqlite_test.c  -lsqlite3
/home/topeet/source_code/rk356x_linux/buildroot/output/rockchip_rk3568/build/sqlite-3210000/.libs//libsqlite3.so: undefined reference to `pthread_join@GLIBC_2.34'
/home/topeet/source_code/rk356x_linux/buildroot/output/rockchip_rk3568/build/sqlite-3210000/.libs//libsqlite3.so: undefined reference to `dlsym@GLIBC_2.34'
/home/topeet/source_code/rk356x_linux/buildroot/output/rockchip_rk3568/build/sqlite-3210000/.libs//libsqlite3.so: undefined reference to `pthread_mutex_trylock@GLIBC_2.34'
/home/topeet/source_code/rk356x_linux/buildroot/output/rockchip_rk3568/build/sqlite-3210000/.libs//libsqlite3.so: undefined reference to `dlclose@GLIBC_2.34'
/home/topeet/source_code/rk356x_linux/buildroot/output/rockchip_rk3568/build/sqlite-3210000/.libs//libsqlite3.so: undefined reference to `lstat64@GLIBC_2.33'
/home/topeet/source_code/rk356x_linux/buildroot/output/rockchip_rk3568/build/sqlite-3210000/.libs//libsqlite3.so: undefined reference to `fcntl64@GLIBC_2.28'
/home/topeet/source_code/rk356x_linux/buildroot/output/rockchip_rk3568/build/sqlite-3210000/.libs//libsqlite3.so: undefined reference to `pthread_mutexattr_destroy@GLIBC_2.34'
/home/topeet/source_code/rk356x_linux/buildroot/output/rockchip_rk3568/build/sqlite-3210000/.libs//libsqlite3.so: undefined reference to `pthread_mutexattr_settype@GLIBC_2.34'
/home/topeet/source_code/rk356x_linux/buildroot/output/rockchip_rk3568/build/sqlite-3210000/.libs//libsqlite3.so: undefined reference to `dlerror@GLIBC_2.34'
/home/topeet/source_code/rk356x_linux/buildroot/output/rockchip_rk3568/build/sqlite-3210000/.libs//libsqlite3.so: undefined reference to `fstat64@GLIBC_2.33'
/home/topeet/source_code/rk356x_linux/buildroot/output/rockchip_rk3568/build/sqlite-3210000/.libs//libsqlite3.so: undefined reference to `pthread_mutexattr_init@GLIBC_2.34'
/home/topeet/source_code/rk356x_linux/buildroot/output/rockchip_rk3568/build/sqlite-3210000/.libs//libsqlite3.so: undefined reference to `pthread_create@GLIBC_2.34'
/home/topeet/source_code/rk356x_linux/buildroot/output/rockchip_rk3568/build/sqlite-3210000/.libs//libsqlite3.so: undefined reference to `stat64@GLIBC_2.33'
/home/topeet/source_code/rk356x_linux/buildroot/output/rockchip_rk3568/build/sqlite-3210000/.libs//libsqlite3.so: undefined reference to `dlopen@GLIBC_2.34'

目前不知道 报错是什么原因引起的。

先放一放。

然后是我的解决方式。

我是这样解决的,首先我 我觉得 Buildroot 肯定下载了 关于sqlite 的 相关的源码包。

可以看到就是这个。 我手动解压了。

然后我手动编译了一下。

复制代码
 1099  ./configure --host=aarch64-linux-gnu --prefix=/home/topeet/source_code/sqlite_install
 1100  make
 1101  make install

然后 在编译 C的 sqlite 应用程序的时候,使用的这个命令。

这是我使用的编译命令。

复制代码
1162  aarch64-linux-gnu-gcc -I /home/topeet/source_code/sqlite_install/include/  -L /home/topeet/source_code/sqlite_install/lib/  -o test_sqlite2 sqlite_test.c  -lsqlite3

这是链接的动态库,能不能 使用静态库呢?

答案是不能的, 我在使用的时候出现这个问题。

编译命令:

复制代码
root@ubuntu:/home/topeet/source_code# aarch64-linux-gnu-gcc -I /home/topeet/source_code/sqlite_install/include/  -L /home/topeet/source_code/sqlite_install/lib/  -o test_sqlite2 sqlite_test.c -lsqlite3  -static

报错如下:

复制代码
root@ubuntu:/home/topeet/source_code# aarch64-linux-gnu-gcc -I /home/topeet/source_code/sqlite_install/include/  -L /home/topeet/source_code/sqlite_install/lib/  -o test_sqlite2 sqlite_test.c -lsqlite3  -static
/home/topeet/source_code/sqlite_install/lib//libsqlite3.a(sqlite3.o): In function `pthreadMutexLeave':
/home/topeet/source_code/rk356x_linux/buildroot/dl/sqlite-autoconf-3210000/sqlite3.c:24104: undefined reference to `pthread_mutex_unlock'
/home/topeet/source_code/sqlite_install/lib//libsqlite3.a(sqlite3.o): In function `pthreadMutexTry':
/home/topeet/source_code/rk356x_linux/buildroot/dl/sqlite-autoconf-3210000/sqlite3.c:24066: undefined reference to `pthread_mutex_trylock'
/home/topeet/source_code/sqlite_install/lib//libsqlite3.a(sqlite3.o): In function `pthreadMutexEnter':
/home/topeet/source_code/rk356x_linux/buildroot/dl/sqlite-autoconf-3210000/sqlite3.c:24020: undefined reference to `pthread_mutex_lock'
/home/topeet/source_code/sqlite_install/lib//libsqlite3.a(sqlite3.o): In function `unixDlClose':
/home/topeet/source_code/rk356x_linux/buildroot/dl/sqlite-autoconf-3210000/sqlite3.c:36586: undefined reference to `dlclose'
/home/topeet/source_code/sqlite_install/lib//libsqlite3.a(sqlite3.o): In function `unixDlSym':
/home/topeet/source_code/rk356x_linux/buildroot/dl/sqlite-autoconf-3210000/sqlite3.c:36582: undefined reference to `dlsym'
/home/topeet/source_code/sqlite_install/lib//libsqlite3.a(sqlite3.o): In function `unixDlOpen':
/home/topeet/source_code/rk356x_linux/buildroot/dl/sqlite-autoconf-3210000/sqlite3.c:36541: undefined reference to `dlopen'
/home/topeet/source_code/sqlite_install/lib//libsqlite3.a(sqlite3.o): In function `sqlite3ThreadCreate':
/home/topeet/source_code/rk356x_linux/buildroot/dl/sqlite-autoconf-3210000/sqlite3.c:27396: undefined reference to `pthread_create'
/home/topeet/source_code/sqlite_install/lib//libsqlite3.a(sqlite3.o): In function `pthreadMutexFree':
/home/topeet/source_code/rk356x_linux/buildroot/dl/sqlite-autoconf-3210000/sqlite3.c:23971: undefined reference to `pthread_mutex_destroy'
/home/topeet/source_code/sqlite_install/lib//libsqlite3.a(sqlite3.o): In function `pthreadMutexAlloc':
/home/topeet/source_code/rk356x_linux/buildroot/dl/sqlite-autoconf-3210000/sqlite3.c:23927: undefined reference to `pthread_mutexattr_init'
/home/topeet/source_code/rk356x_linux/buildroot/dl/sqlite-autoconf-3210000/sqlite3.c:23928: undefined reference to `pthread_mutexattr_settype'
/home/topeet/source_code/rk356x_linux/buildroot/dl/sqlite-autoconf-3210000/sqlite3.c:23929: undefined reference to `pthread_mutex_init'
/home/topeet/source_code/rk356x_linux/buildroot/dl/sqlite-autoconf-3210000/sqlite3.c:23930: undefined reference to `pthread_mutexattr_destroy'
/home/topeet/source_code/rk356x_linux/buildroot/dl/sqlite-autoconf-3210000/sqlite3.c:23938: undefined reference to `pthread_mutex_init'
/home/topeet/source_code/sqlite_install/lib//libsqlite3.a(sqlite3.o): In function `sqlite3ThreadJoin':
/home/topeet/source_code/rk356x_linux/buildroot/dl/sqlite-autoconf-3210000/sqlite3.c:27416: undefined reference to `pthread_join'
/home/topeet/source_code/sqlite_install/lib//libsqlite3.a(sqlite3.o): In function `unixDlError':
/home/topeet/source_code/rk356x_linux/buildroot/dl/sqlite-autoconf-3210000/sqlite3.c:36555: undefined reference to `dlerror'

先不管它。

我对 普通的C语言程序作了一个测试,

关于动态链接与静态连接是这样的。

但是为什么 第三方库 ,静态连接会出现问题,不清楚,先不管它。

然后是将编译好的 C语言的测试程序直接拷贝到开发板进行测试。

可以看到是可以的, 这里 测试程序我并没有 进行 关于头文件,以及 库文件的指定。

然后到这里 我觉的我有必要总结一下 关于 动态库,与静态库的东西。

代码:

头文件。

mylib.h

复制代码
int Max(int a, int b);

void PrintMaxNumber(int a, int b);

库文件。

mylib.c

复制代码
#include <stdio.h>
int Max(int a, int b)
{
        return (a > b) ? a : b;
}

void PrintMaxNumber(int a, int b)
{
        printf("The max is %d.\n", Max(a, b));
}

主文件代码

test.c

复制代码
#include <stdio.h>
#include "mylib.h"

int main()
{
        int a = 5;
        int b = 3;
        int max = Max(a, b);

        printf("The max number is %d.\n", max);

        PrintMaxNumber(a, b);
        return 0;
}

自己编写一个 静态库,

我自己的操作。

复制代码
先编译成 .o 
root@ubuntu:/home/topeet/source_code# aarch64-linux-gnu-gcc -c mylib.c  -o mylib.o

然后通过.o 生成 .a 文件。
root@ubuntu:/home/topeet/source_code# aarch64-linux-gnu-ar -rc libmylib.a mylib.o


root@ubuntu:/home/topeet/source_code# ls
libmylib.a    mycode   mylib.h  rk356x_linux                  rk_android11.0_sdk                       sqlite_install  test1  test.c
libsqlite3.a  mylib.c  mylib.o  rk356x_linux_20231106.tar.gz  rk_android11.0_sdk_full_20240918.tar.xz  sqlite_test.c   test2

主要是注意 使用的交叉编译器的命令。

自己编写一个动态库。

复制代码
编译成 .o 文件
root@ubuntu:/home/topeet/source_code# aarch64-linux-gnu-gcc -c mylib.c  -o mylib2.o -fPIC

连接成 .so 文件
root@ubuntu:/home/topeet/source_code# aarch64-linux-gnu-gcc -o libmylib.so mylib2.o  -shared
root@ubuntu:/home/topeet/source_code# ls
libmylib.a   libsqlite3.a  mylib2.o  mylib.h  rk356x_linux                  rk_android11.0_sdk                       sqlite_install  test1  test.c
libmylib.so  mycode        mylib.c   mylib.o  rk356x_linux_20231106.tar.gz  rk_android11.0_sdk_full_20240918.tar.xz  sqlite_test.c   test2

注意: 动态库与静态库 在链接时候的命令使用的是不一样的。

但是实际上是一样的,

比如我在编译静态库的时候, 使用的是 ar 命令,但是 如果你使用 gcc 的话,它会自动的使用 ar 命令去生成 静态库。

编译的时候,连接动态库。

编译的时候,连接静态库。

当静态库与动态库 在同一个目录下的时候, 它会优先选择动态库

然后在总结一下 , 交叉编译器的参数 。

总结:

1 -c 参数指定了 只是编译出.o 文件。

如果有-c 参数的话,就是 已经完成了 c--->汇编--->机器码的 过程,只是还没有 将.o 文件连接在一起, 而 没有-c 的话,就是 直接 将 .o 连接在一起了。

2 -o 参数 是在指定输出的名字, 可以与-c 一起使用,也可以单独使用。

3 -I (incldue) , 指的是 在搜索头文件的时候, 首先去 /usr/include 目录寻找,如果找不到的话,就去 自己指定的这个目录下寻找。

4 -L , 指的是 指定了库的路径,也是首先去默认的 /usr/lib 目录下寻找,如果找不到的话,就去 你指定的牧区去寻找。

5 -l (小写L) , 指的是 所连接的文件,既指 动态库,也指静态库, 这两个指定的方式上没有差别,都存在的话,优先选择动态库。

总结:

1 static 是在编译 应用的时候使用的,

2 shared 是在生成 动态库的时候使用的。

疑问: 那么交叉编译器使用的路径是什么呢? 肯定跟 系统本身的 gcc 使用的不是一个路径。

使用的测试命令是。

复制代码
root@ubuntu:/home/topeet/source_code# echo 'main(){}'| aarch64-linux-gnu-gcc -E -v -

结果是。

复制代码
root@ubuntu:/home/topeet/source_code# echo 'main(){}'| aarch64-linux-gnu-gcc -E -v -
使用内建 specs。
COLLECT_GCC=aarch64-linux-gnu-gcc
目标:aarch64-linux-gnu
配置为:'/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/snapshots/gcc.git~linaro-6.3-2017.05/configure' SHELL=/bin/bash --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-lto --enable-shared --without-included-gettext --enable-nls --disable-sjlj-exceptions --enable-gnu-unique-object --enable-linker-build-id --disable-libstdcxx-pch --enable-c99 --enable-clocale=gnu --enable-libstdcxx-debug --enable-long-long --with-cloog=no --with-ppl=no --with-isl=no --disable-multilib --enable-fix-cortex-a53-835769 --enable-fix-cortex-a53-843419 --with-arch=armv8-a --enable-threads=posix --enable-multiarch --enable-libstdcxx-time=yes --enable-gnu-indirect-function --with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/sysroots/aarch64-linux-gnu --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu/aarch64-linux-gnu/libc --enable-checking=release --disable-bootstrap --enable-languages=c,c++,fortran,lto --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=aarch64-linux-gnu --prefix=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu
线程模型:posix
gcc 版本 6.3.1 20170404 (Linaro GCC 6.3-2017.05)
COLLECT_GCC_OPTIONS='-E' '-v' '-march=armv8-a' '-mlittle-endian' '-mabi=lp64'
 /home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../libexec/gcc/aarch64-linux-gnu/6.3.1/cc1 -E -quiet -v -imultiarch aarch64-linux-gnu -iprefix /home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/ -isysroot /home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../aarch64-linux-gnu/libc - -march=armv8-a -mlittle-endian -mabi=lp64
忽略重复的目录"/home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/../../lib/gcc/aarch64-linux-gnu/6.3.1/include"
忽略不存在的目录"/home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../aarch64-linux-gnu/libc/usr/local/include/aarch64-linux-gnu"
忽略不存在的目录"/home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../aarch64-linux-gnu/libc/usr/local/include"
忽略重复的目录"/home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/../../lib/gcc/aarch64-linux-gnu/6.3.1/include-fixed"
忽略重复的目录"/home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/../../lib/gcc/aarch64-linux-gnu/6.3.1/../../../../aarch64-linux-gnu/include"
忽略不存在的目录"/home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../aarch64-linux-gnu/libc/usr/include/aarch64-linux-gnu"
#include "..." 搜索从这里开始:
#include <...> 搜索从这里开始:
 /home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/include
 /home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/include-fixed
 /home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/../../../../aarch64-linux-gnu/include
 /home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../aarch64-linux-gnu/libc/usr/include
搜索列表结束。
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<命令行>"
# 31 "<命令行>"
# 1 "/home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/usr/include/stdc-predef.h" 1 3 4
# 32 "<命令行>" 2
# 1 "<stdin>"
main(){}
COMPILER_PATH=/home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../libexec/gcc/aarch64-linux-gnu/6.3.1/:/home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../libexec/gcc/aarch64-linux-gnu/:/home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../libexec/gcc/:/home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/../../../../aarch64-linux-gnu/bin/
LIBRARY_PATH=/home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/:/home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/:/home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/:/home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/../../../../aarch64-linux-gnu/lib/../lib64/:/home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/../../../../aarch64-linux-gnu/lib/:/home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../aarch64-linux-gnu/libc/lib/:/home/topeet/source_code/rk356x_linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../aarch64-linux-gnu/libc/usr/lib/
COLLECT_GCC_OPTIONS='-E' '-v' '-march=armv8-a' '-mlittle-endian' '-mabi=lp64'
root@ubuntu:/home/topeet/source_code#

可以看到 这个 LIBRARY_PATH ,确实 不是 系统本身 的路径, 这个是 交叉编译器 压缩包本身的路径。

来分析一下 这个命令的含义。

echo 'main(){}'| aarch64-linux-gnu-gcc -E -v -

感觉像是写了一个 c 语言程序,交给 交叉编译器去测试了。

好了,到这里就总结完毕了。

参考资料:

基本上是一些个网上的资料。

Qt应用开发(3)------qt sqlite配置以及qt官方例程编译测试_buildroot编译qt的sqlite3-CSDN博客

嵌入式开发-linux根文件系统(一)sqlite_buildroot sqlite-CSDN博客

嵌入式开发-linux根文件系统(一)sqlite_buildroot sqlite-CSDN博客

《迅为 6818 使用手册》

相关推荐
BD_Marathon2 小时前
【Zookeeper】CAP理论——CAP介绍
linux·分布式·zookeeper
赖small强3 小时前
【Linux 网络基础】HTTPS 技术文档
linux·网络·https·tls
写代码的学渣3 小时前
ubuntu 22.04 新装的系统 xshell 连不上
linux·运维·ubuntu
序属秋秋秋3 小时前
《Linux系统编程之进程环境》【环境变量】
linux·运维·服务器·c语言·c++·操作系统·系统编程
云计算练习生4 小时前
linux shell编程实战 10 Git工具详解与运维场景实战
linux·运维·git
虚伪的空想家6 小时前
KVM的ubuntu虚机如何关闭安全启动
linux·安全·ubuntu
t1987512812 小时前
在Ubuntu 22.04系统上安装libimobiledevice
linux·运维·ubuntu
skywalk816312 小时前
linux安装Code Server 以便Comate IDE和CodeBuddy等都可以远程连上来
linux·运维·服务器·vscode·comate
晚风吹人醒.13 小时前
缓存中间件Redis安装及功能演示、企业案例
linux·数据库·redis·ubuntu·缓存·中间件
Hard but lovely13 小时前
linux: pthread库的使用和理解
linux