前文提到,编译源代码安装libiconv-1.18的步骤方法,但在aarch64平台编译时,报如下错误:
./configure --prefix=/usr/local
./configure: This script requires a shell more modern than all
./configure: the shells that I found on your system.
如果编译不成功,还可以用apt install安装,
如果这两样都不行,还可以上网下载安装包或二进制包。
常见的网站有https://archlinuxarm.org/和https://pkgs.org/,只要按软件包名搜索,然后找到适合自己平台的包下载即可。
wget http://mirror.archlinuxarm.org/aarch64/extra/libiconv-1.18-1-aarch64.pkg.tar.xz
mkdir libiconv
tar xf ../libiconv-1.18-1-aarch64.pkg.tar.xz
export LIBRARY_PATH=/par/:/par/libiconv/usr/lib
不过要注意下载包对系统c库的版本要求不同,我从https://archlinuxarm.org/packages/aarch64/libpqxx下载的
https://mirrors.tuna.tsinghua.edu.cn/archlinuxarm/aarch64/extra/libpqxx-7.9.2-1-aarch64.pkg.tar.xz就存在依赖GLIBC_2.38的问题。
而从https://altlinux.pkgs.org/sisyphus/classic-aarch64/libpqxx-devel-7.10.1-alt1.aarch64.rpm.html下载的rpm包就不存在这个问题。
注意rpm包要下载两个,包括库本身和devel开发支持包,如果手工解压,需要把两个都解压缩到同一个目录才能生效。
http://mirror.yandex.ru/altlinux/Sisyphus/aarch64/RPMS.classic/libpqxx-7.10.1-alt1.aarch64.rpm
http://mirror.yandex.ru/altlinux/Sisyphus/aarch64/RPMS.classic/libpqxx-devel-7.10.1-alt1.aarch64.rpm
如下所示
ls /par/libpqxx/usr/lib
libpqxx-7.10.so libpqxx.so
头文件一般位于软件包和lib目录同级的include目录內,也可以放在统一的地方,如/par/include,这样就不用写多个-I 参数了。
最后,设置环境变量,编译链接执行成功。
export LIBRARY_PATH=/par/:/par/libiconv/usr/lib:/par/libpqxx/usr/lib
export LD_LIBRARY_PATH=/par/:/par/libiconv/usr/lib:/par/libpqxx/usr/lib
g++ -std=c++17 -o duckcmd7 csv_reader2.cpp duckcmd.cpp -lduckdb -liconv -lpqxx -lpq -lgmp -I /par/include
./duckcmd7
DuckDB GMP Shell (enter 'exit;' to quit, 'read file.sql' to execute script)
Type 'timi on/off' to enable/disable timing
=============================================
duckdb>