2011-12-30 2 views
1

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を実行したときに私が得るエラーは次のとおりです:Makefileは現在、次のようになりますパスを含めることを示唆している

common.h:58:22: error: postgres.h: No such file or directory

(ファイルは$ PQINCに存在する)追加されていません。 私はMakefileを書いて以来、長い時間を過ごしました。残念ながら、私はかなり '共有'は、Ubuntu(私の現在の開発者)に共有ライブラリを構築するgccフラグではないことを確信しています - 私はフラグが 'fPIC'であるべきだと思います - 誰かがこれを確認できますか?

ノーなります実行可能ファイルに、Ubuntuの10.0.4上のgcc V4.4.3をruningてと$(OBJS)のもののように、オブジェクトファイルをオンコンパイラライン上-Isomethingを配置PG 8.4で使用するために

+1

共有ライブラリを作成するには、リンカーステージで-sharedが必要です。共有ライブラリで使用される位置独立コードを生成するには、コンパイル段階で-fPICが必要です。 (-fPICはCFLAGS行に追加することができます) – gastush

答えて

2

-I$(PQINC)ターゲットallからoverride CFLAGSで始まる行の末尾に移動してみてください。

+0

指摘のための+1 *正確に何をするか。今すぐ正常にコンパイルされます。私はこの答えを受け入れる前に、現在のリンケージエラーを解決しようとしています。 –

2

をコンパイルしていますまったく効果があります。

ソースファイルをコンパイルするときに行う必要があります。

メイクファイルにはソースファイルの処理ルールが明示されていないので、デフォルトのものを使用している可能性があります。PQINCについては信じられないほどです。

1

-Iを持たないfoo.cからfoo.oをビルドするためのデフォルトルールを使用しているようです。あなたのMakefileに以下のルールを追加してみてください:

.c.o: 
     $(CC) $(CFLAGS) -c $< -o [email protected] -I$(PQINC) 
+0

また、 '$(CFLAGS)'に '-I $(PQINC)'を追加することもできます。 –

関連する問題