0

私は今、Mac上でpljavaを構築しています。pljava はビルドに maven と maven nar プラグインを使用します。この maven nar ビルドは現在、.so ではなく dylib を作成しています。postgres は代わりに .so を必要としているようです。これは、postgres トレースをオンにした場合の出力です。

2014-09-26 10:12:59 EDT STATEMENT:  CREATE FUNCTION sqlj.java_call_handler() RETURNS language_handler AS 'pljava' LANGUAGE C
2014-09-26 10:12:59 EDT DEBUG:  bind <unnamed> to <unnamed>
2014-09-26 10:12:59 EDT LOG:  execute <unnamed>: CREATE FUNCTION sqlj.java_call_handler() RETURNS language_handler AS 'pljava' LANGUAGE C
2014-09-26 10:12:59 EDT DEBUG:  ProcessUtility
2014-09-26 10:12:59 EDT DEBUG:  find_in_dynamic_libpath: trying "/Library/PostgreSQL/9.1/lib/postgresql/pljava"
2014-09-26 10:12:59 EDT DEBUG:  find_in_dynamic_libpath: trying "/Library/PostgreSQL/9.1/lib/pljava"
2014-09-26 10:12:59 EDT DEBUG:  find_in_dynamic_libpath: trying "/Library/PostgreSQL/9.1/share/pljava/pljava"
2014-09-26 10:12:59 EDT DEBUG:  find_in_dynamic_libpath: trying "/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/jre/lib/pljava"
2014-09-26 10:12:59 EDT DEBUG:  find_in_dynamic_libpath: trying "/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/jre/lib/server/pljava"
2014-09-26 10:12:59 EDT DEBUG:  find_in_dynamic_libpath: trying "/Library/PostgreSQL/9.1/lib/postgresql/pljava.so"
2014-09-26 10:12:59 EDT DEBUG:  find_in_dynamic_libpath: trying "/Library/PostgreSQL/9.1/lib/pljava.so"
2014-09-26 10:12:59 EDT DEBUG:  find_in_dynamic_libpath: trying "/Library/PostgreSQL/9.1/share/pljava/pljava.so"
2014-09-26 10:12:59 EDT DEBUG:  find_in_dynamic_libpath: trying "/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/jre/lib/pljava.so"
2014-09-26 10:12:59 EDT DEBUG:  find_in_dynamic_libpath: trying "/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/jre/lib/server/pljava.so"
2014-09-26 10:12:59 EDT ERROR:  could not access file "pljava": No such file or directory

だから私の質問は - どうすれば.dylibの代わりに.soファイルをmaven narに出力させることができますか? タイプ「shared」を使用するとdylibが作成され、タイプ「plugin」を使用すると.bundleが作成され、タイプ「static」を使用するとリンクが失敗します。

4

1 に答える 1

1

問題を解決しました。タイプ「プラグイン」を使用すると、適切なタイプのファイルが作成されます。この質問に対するマイルの回答は、私がそれを理解するのに役立ちました:

osx の .so と .dylib の違いは何ですか?

Mac OS はロード可能なモジュールに .bundle 拡張子を推奨していますが、移植されたアプリケーション (PostgreSQL など) は依然として .so を使用したいと考えています。ファイル名を pljava.so に変更した後、PostgreSQL はモジュールを正常にロードできました。

于 2014-09-26T21:15:28.330 に答える