[pgsql-jp: 41559] Re: 【質問】Windowsでのリンクについて。

OA ped02744 @ mbox.kyoto-inet.or.jp
2014年 1月 28日 (火) 22:21:44 JST


ご回答ありがとうございました。

すみません。本日自己解決しました。

しようとしていたのは、サーバサイドのDLL作成でしたが、
postgres.libを指定してもDLL作成時にシンボルエラーになってしまうというものでした。
Linuxなら「cc -shared -o foo.so foo.c」で外部lib指定不要で作成できるのに、
不便なものです。

結論からいうと、 
 extern "C"{}の中で   #pragma comment(lib, "postgres.lib") をしないと
リンクエラーになってしまうようです。
C++でそのままリンクしようとしていたのでエラーになっていたようです。
PG_MAGICの部分だけextern "C"していました。。。

お忙しい中回答いただきありがとうございました。
会社からは本MLにアクセスできないので、自宅からになってしまうため、
連絡が遅くなってしまいました。
また、よろしくお願いいたします。

-----Original Message-----
From: Tomoaki Sato [mailto:sato @ sraoss.co.jp] 
Sent: Tuesday, January 28, 2014 12:10 AM
To: pgsql-jp @ ml.postgresql.jp; ped02744 @ mbox.kyoto-inet.or.jp
Subject: Re: [pgsql-jp: 41557] 【質問】Windowsでのリンクについて。

佐藤です。

From: "Yoshinobu Otaka" <ped02744 @ mbox.kyoto-inet.or.jp>
Date: Sat, 25 Jan 2014 19:48:55 +0900

> 初めて投稿させていただきます。
> Windows64bit版OSでPostgresql64bit版9.1を利用したアプリの作成において、
> ArrayType関連を含むプログラムをリンクしようとするとエラーになってしまいます。

以下の情報だけだと答えるのがたいへんなので、何を使ってどのようにビルド
しようとしたのかという情報と、エラーを再現できる最小限のコードを出して
もらえますか。

>  ArrayType *a = construct_array(d, size, INT4OID, sizeof(int4), true, 'i');
> 等でリンク時に" construct_array "が未定義になります。(コンパイルエラーはありません)

あと、クライアントアプリケーションでサーバ側の construct_array 関数を使
うことはあまりないと思うのですが、そもそもどのようなことをやろうとして
いますか。

> PQexec()やPQgetValue()等のクライアントサイド関数は問題ありません。
> 初心者ゆえ何か間違っている・足りないのだと思うのですが、
> Postgresql9.1.5文書34.9.6にはWindowsの項がありませんし、
> *.libはpostgresqlのHOME/libの下にある6個しか見当たりません。


----
Tomoaki Sato <sato @ sraoss.co.jp>
SRA OSS, Inc. Japan



pgsql-jp メーリングリストの案内