2010-11-21 33 views
3

私は2つのプロジェクトを持っています.1つはlibpqヘッダーと実行可能ファイルを使用するライブラリで、私のライブラリとlibpqにリンクしますが、makefileをどのように入れても、 libpqとawaysは私に未定義の参照エラーを返します。それは私のlibの大丈夫にリンクします。libpq関数の定義されていない参照

g++ -o MYAPP main.o -L../Libs -lpq -lMYLIB 

libpq.aとlibmylib.aの両方がLibsディレクトリ内にあります。
nmを使って関数をチェックしましたが、-lpqを-lpq_に変更しました。コンパイラは欠落しているlibについて不平を言っています。

これは本当に私を悩ましています、それは何でしょうか?

(私の英語は申し訳ありませんが、良いことではありません)

おかげで、
ジョナサン

答えて

3

は、私はすぐに私が飛んでいると、彼らはextern "C"ときに身を包むいないように見えるpostgreヘッダのいくつかをチェックしC++コンパイラでコンパイルされます。 postgreのヘッダのinclude文をextern "C" { ... }ブロックに囲んで問題が解決された可能性はありますか?

編集。 問題はこれだと思う:libpq.a and libmylib.a。私はあなたの元のポストでこれを見落としました。 gccに-lpqを与えると、動的にリンクしようとします。 ライブラリディレクトリに-L を指定しない限り、ライブラリの静的バージョンのみが存在します。静的ライブラリでは、取り込む必要のある他のライブラリを記録することはできません。また、静的ライブラリでは、指定順序が重要です。他のライブラリに依存するライブラリは、それらのライブラリの前にリストする必要があります。 apt-getを使ってインストールすると、リンクする必要があるものを適切に文書化した共有ライブラリがインストールされます(ldd /usr/lib/libpq.soを確認してください)。したがって、以前の試みでは、おそらく-lpq-lMYLIBに逆転させ、libpqが必要とする他のライブラリをリストするだけでした。

+0

私はextern "C" {#include "libpq-fe.h"}を追加して動作しませんでした – Jonathan

+0

AFAIK、リンク順序はダイナミックライブラリとは関係ありませんが、まだ試していない場合は、 '-lpq'と' -lMYLIB'を逆にします。 – dennycrane

+0

私はそれをしてくれました、そして、それは私に道徳的な誤りを与えてくれますが、kerberusのようなlibpqの中の他のもののために、私は悩まされていました。しかし、今は働いています...私がしたことは、私がリンク目的のために作成したLibsディレクトリを削除し、libpqをapt-getでインストールし、g ++リンクをこの新しいlibにすることでした。 。他の図書館とリンクしていると思いますか?これは私にとってちょっとしたニュースです。誰かが説明して裸の場合... – Jonathan

関連する問題