【发布时间】:2012-01-30 13:43:41
【问题描述】:
我正在修改一个旧的 makefile 以便为 postgreSQL 构建一个 C 扩展。 Makefile 目前看起来像这样:
PGLIB = /usr/lib/postgresql/8.4/lib
PQINC = /usr/include/postgresql/8.4/server
CC=gcc
override CFLAGS+= $(CFLAGS_SL) -DPG_AGGREGATE
SHLIB = pg_myextlib
SRC = foo.c \
foobar.c
OBJS = foo.o \
foobar.o
all: $(OBJS)
$(CC) -shared -o $(SHLIB)$(DLSUFFIX) $(OBJS) -I$(PQINC)
cp *.so $(PGLIB)
clean:
rm -f $(SHLIB) $(OBJS)
我运行 make 时遇到的错误是:
common.h:58:22: 错误:postgres.h: 没有这样的文件或目录
这表明没有添加包含路径(文件存在于 $PQINC 中)。 自从我编写 Makefile 以来已经有很长时间了——从那以后我就没有写过很多了。顺便说一句,我很确定“shared”不是在 Ubuntu(我当前的开发箱)上构建共享库的 gcc 标志——我认为该标志应该是“fPIC”——有人可以确认吗?
我在 Ubuntu 10.0.4 上运行 gcc v4.4.3 并编译以用于 PG 8.4
【问题讨论】:
-
链接器阶段需要 -shared 来生成共享库。在编译阶段需要 -fPIC 来生成将在共享库中使用的位置无关代码。 (-fPIC 可以添加到 CFLAGS 行)
标签: c postgresql makefile