错误:Makefile:120: /usr/lib/postgresql/12/lib/pgxs/src/makefiles/pgxs.mk: No such file or directory make: *** No rule to make target '/usr/lib/postgresql/12/lib/pgxs/src/makefiles/pgxs.mk'.
我使用pgenv
进行PostgreSQL版本管理,之前我只通过pgenv
使用PostgreSQL 12和13,而sudo make install
可以工作。
我想在PG 14上测试Apache-AGE,所以我使用pgenv build 14.0
安装了PG 14。PostgreSQL服务器已经启动并运行,我已经测试了一些查询。
但我得到错误,而安装从源. makefile中的第120行出错,即
PG_CONFIG ?= pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)
字符串
Make文件执行pg_config --pgxs
命令获取pgxs
路径,当我们用传统方法安装PostgreSQL时,它会获取旧的pgxs路径,即从apt存储库。
但是我执行的是相同的命令pg_config --pgxs
,我在终端中得到了正确的路径
~ pg_config --pgxs
/home/sarthak/pgenv/pgsql-14.0/lib/pgxs/src/makefiles/pgxs.mk
型
我已经在默认的shell zsh和bash上尝试过这个命令。
那么,如果它给出了pgxs的正确路径,为什么make file在运行相同的命令时会得到不同的路径呢?
现在我得到这个错误的所有PostgreSQL版本,这之前也是工作。
编辑:从终端运行时添加pg_config
的输出
pg_config ✔ 10.4G
BINDIR = /home/sarthak/pgenv/pgsql-14.0/bin
DOCDIR = /home/sarthak/pgenv/pgsql-14.0/share/doc
HTMLDIR = /home/sarthak/pgenv/pgsql-14.0/share/doc
INCLUDEDIR = /home/sarthak/pgenv/pgsql-14.0/include
PKGINCLUDEDIR = /home/sarthak/pgenv/pgsql-14.0/include
INCLUDEDIR-SERVER = /home/sarthak/pgenv/pgsql-14.0/include/server
LIBDIR = /home/sarthak/pgenv/pgsql-14.0/lib
PKGLIBDIR = /home/sarthak/pgenv/pgsql-14.0/lib
LOCALEDIR = /home/sarthak/pgenv/pgsql-14.0/share/locale
MANDIR = /home/sarthak/pgenv/pgsql-14.0/share/man
SHAREDIR = /home/sarthak/pgenv/pgsql-14.0/share
SYSCONFDIR = /home/sarthak/pgenv/pgsql-14.0/etc
PGXS = /home/sarthak/pgenv/pgsql-14.0/lib/pgxs/src/makefiles/pgxs.mk
CONFIGURE = '--prefix=/home/sarthak/pgenv/pgsql-14.0'
CC = gcc
CPPFLAGS = -D_GNU_SOURCE
CFLAGS = -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wformat-security -fno-strict-aliasing-fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -O2
CFLAGS_SL = -fPIC
LDFLAGS = -Wl,--as-needed -Wl,-rpath,'/home/sarthak/pgenv/pgsql-14.0/lib',--enable-new-dtags
LDFLAGS_EX =
LDFLAGS_SL =
LIBS = -lpgcommon -lpgport -lz -lreadline -lpthread -lrt -ldl -lm
VERSION = PostgreSQL 14.0
型
3条答案
按热度按时间4nkexdtk1#
PG_CONFIG
不是makefile的路径。它是所有二进制文件所在的bin文件夹的路径。尝试使用以下方法更改
PG_CONFIG
的值:字符串
wvyml7n52#
你该跑了
字符串
调整“configure”和“make”选项和标志,然后再次运行构建
您可以在这里阅读更多关于配置
pgevn build
的信息。yhived7q3#
这个问题对于任何使用
pgenv
的人来说都是常见的。发生的是,当我们卸载通过sudo apt install postgresql-server-dev-all
安装的postgresql时,位于/usr/bin
中的pg_config
二进制文件不会被删除。pgenv
在其根目录下安装新的PostgreSQL版本,pg_config
的位置为/home/sarthak/pgenv/pgsql/bin/pg_config
,并将其添加到User PATH而不是sudo PATH因此,如果我们运行像
make install
这样命令,它将工作,即没有sudo。但是当我们运行sudo make install
时,make文件会在sudo环境中执行pg_config --pgxs
,它会在/usr/bin
目录中查找pg_config
,因为它在sudo路径中。解决方案:使用以下命令将
/pgenv/pgsql/bin/pg_config
中的pg_config
软链接到/usr/bin
:在/usr/bin
目录中运行此命令sudo ln -s /home/sarthak/pgenv/pgsql/bin/pg_config pg_config
然后它应该与或没有
sudo
工作