You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在FreeBSD 14.1下使用自定义标志编译PostgreSQL 16失败——GCC报错无法读取spec文件

在FreeBSD 14.1下使用自定义标志编译PostgreSQL 16失败——GCC报错无法读取spec文件

你好!我看到你在AWS EC2的FreeBSD 14.1实例上用GCC13编译PostgreSQL 16.3时遇到了这个头疼的错误:gcc13: fatal error: cannot read spec file './specs': Is a directory,我来帮你拆解问题和解决办法。

错误原因分析

这个错误的核心是:GCC被要求读取当前目录下名为specs的文件,但实际这个路径是一个目录,而非GCC需要的spec配置文件。通常这种情况是由下面两种原因导致的:

  • 你的脚本中不小心设置了GCC_SPECS环境变量,指向了一个目录而不是具体的spec文件
  • 在PostgreSQL的configure阶段,传递了错误的--with-gcc-specs参数,同样指向了目录而非文件

具体解决步骤

1. 检查并修复脚本中的配置

先打开你的编译脚本,查找是否有类似以下的错误配置:

# 错误示例:指向了目录
export GCC_SPECS=./specs
# 或者configure时的错误参数
./configure --prefix=$POSTGRES_PREFIX --with-gcc-specs=./specs ...
  • 如果你不需要自定义GCC spec文件:直接删除这行环境变量或编译参数,让GCC使用默认的spec文件即可
  • 如果你确实需要自定义spec:
    1. 先找到GCC13默认的spec文件,路径通常是/usr/local/lib/gcc13/specs
    2. 复制这个文件到你的build目录,比如cp /usr/local/lib/gcc13/specs ./my-custom-specs
    3. 修改你的脚本,把路径指向这个实际的文件:export GCC_SPECS=./my-custom-specs 或者 --with-gcc-specs=./my-custom-specs

2. FreeBSD下的替代方案(更省心)

其实FreeBSD的ports仓库已经提供了现成的PostgreSQL 16包,如果你的自定义编译需求不是特别强,直接用包管理安装会避开很多编译坑:

# 安装PostgreSQL 16服务器
pkg install postgresql16-server
# 初始化数据库
service postgresql initdb
# 设置开机自启并启动服务
sysrc postgresql_enable="YES"
service postgresql start

3. 确保编译依赖齐全

如果坚持自定义编译,先确认所有必要的依赖都已安装:

pkg install gcc13 gmake python3
# 编译前正确指定编译器
export CC=gcc13 CXX=g++13

最后小提醒

编译前可以先清理之前的build目录,避免残留的错误配置影响:

rm -rf $BUILD_DIR
mkdir -p $BUILD_DIR

备注:内容来源于stack exchange,提问作者Moksh Chadha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 14:23:04