linux - 无法使用 OpenSSL 交叉编译 PostgreSQL,失败未找到 - 尽管指定了包含搜索路径
问题描述
我正在尝试在 x86 主机上为 AArch64 目标交叉编译 PostgreSQL,并希望使用 OpenSSL 支持进行编译。
我已经使用以下参数成功地为 AArch64 交叉编译了 OpenSSL:
../Configure linux-aarch64 --prefix=$(pwd)/packaged no-dso --cross-compile-prefix="/usr/bin/aarch64-linux-gnu-"
make -j$(nproc)
make -j$(nproc) install
现在开始交叉编译 PostgreSQL,我正在使用以下构建脚本:
test -e postgresql-12.2.tar.gz || wget https://ftp.postgresql.org/pub/source/v12.2/postgresql-12.2.tar.gz
test -e postgresql-12.2 || tar -xzvf postgresql-12.2.tar.gz
cd postgresql-12.2
test -e build_aarch64 && rm -rf build_aarch64
mkdir build_aarch64
cd build_aarch64
../configure --host=aarch64-linux-gnu --without-readline --without-zlib CFLAGS="-O3 -fPIC" CXXFLAGS="-fPIC" CPPFLAGS="-fPIC" --prefix=$PWD/packaged USE_DEV_URANDOM=1 --with-openssl --with-libraries=../../openssl-OpenSSL_1_1_1k/build_aarch64/packaged/lib/ --with-includes=../../openssl-OpenSSL_1_1_1k/build_aarch64/packaged/include/
make -j$(nproc)
配置命令的输出显示包含目录已正确设置:
configure: using CPPFLAGS=-fPIC -D_GNU_SOURCE -I../../openssl-OpenSSL_1_1_1k/build_aarch64/packaged/include/
configure: using LDFLAGS= -L../../openssl-OpenSSL_1_1_1k/build_aarch64/packaged/lib/
运行make
命令失败:
/usr/include/openssl/e_os2.h:13:11: fatal error: openssl/opensslconf.h: No such file or directory
13 | # include <openssl/opensslconf.h>
但是,如果我运行find ../../openssl-OpenSSL_1_1_1k/build_aarch64/packaged/include/ | grep opensslconf.h
它输出:
../../openssl-OpenSSL_1_1_1k/build_aarch64/packaged/include/openssl/opensslconf.h
所以该文件肯定存在于包含路径中。这是一个错误吗?我做错了什么吗?
解决方案
想通了,看起来我必须使用绝对路径而不是搜索目录的相对路径:
../configure --host=aarch64-linux-gnu --without-readline --without-zlib CFLAGS="-O3 -fPIC" CXXFLAGS="-fPIC" CPPFLAGS="-fPIC" --prefix=$PWD/packaged USE_DEV_URANDOM=1 --with-openssl --with-libraries=$(pwd)/../../openssl-OpenSSL_1_1_1k/build_aarch64/packaged/lib/ --with-includes=$(pwd)/../../openssl-OpenSSL_1_1_1k/build_aarch64/packaged/include/
所以基本上只是添加$(pwd)/
到搜索目录路径的开头。
推荐阅读
- python-3.x - 为什么我无法安装 line_profiler?
- machine-learning - 在运行 Fb-prophet 之前使用 PCA 是个好主意吗?
- android - RecyclerView 卡片在片段中不可见
- python - 尝试使用 AWS Transcribe 使用 Python 转录使用 websocket 作为 JSON 转储发送的语音数据时出现“错误请求异常”
- java - 如何将 Kotlin lambda 传递给 Java 供应商参数?
- javascript - 如何在写入时拆分 WriteStream?
- python - DataFrame Plot:如何对 X 轴进行排序
- python - 如何在 Python 中具有浮点数列表的 2 个单元格之间寻找具有容差的相等性?
- twilio - 如何在 Studio 中存储 JSON 变量?
- laravel - 复选框在 Laravel Nova 自定义工具中不起作用