問題が実際にPostgreSQLに関連しているかどうか、またはライブラリビルドに問題があるかどうかをテストします。ライブラリをdlopen()してシンボルを解決するための簡単なプログラムです。でそれをコンパイルします。
gcc dlopentest.c -o dlopentest -ldl
...ととして、それを実行します。
./dlopentest /path/to/my/lib.so somesymbol
または例えば(他のオプションLD_DEBUG=help
用)詳細プレフィックスLD_DEBUG=symbols
用:
LD_DEBUG=symbols ./dlopentest /path/to/my/lib somesymbol
どのシンボルにあなたのコードとそれが何のためにあるかに依存します。あなたは十分な情報を提供していません。
このテストプログラムは、ロードおよび初期化のためにpostgresql実行可能ファイルのシンボルを必要とするライブラリでは機能しません。したがって、コードが手続き型言語などの場合はロードされません。しかし、ほとんどの単純なモジュールはうまく読み込みます。のlibstdC++またはあなたが期待していない他の何かにリンクだ場合
ldd /path/to/your/library.so
を参照するには:
またの出力を調べる必要があります。
// Compile with a c99 compiler; I don't use oldstyle declarations
#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>
int main(int argc, char * argv[]) {
if (argc != 3) {
printf("Usage: %s /path/to/lib/to/load symbol_to_resolve\n", argv[0]);
printf(" eg: %s libc.so.6 gettimeofday\n", argv[0]);
return 1;
}
char * err;
const char * const libname = argv[1];
const char * const symname = argv[2];
dlerror(); // clear dl error state before starting work
void * libhandle = dlopen(libname, RTLD_LAZY);
if ((err = dlerror()) != NULL) {
printf("Failed to load library: %s\n", err);
return 2;
}
void * symhandle = dlsym(libhandle, symname);
if ((err = dlerror()) != NULL) {
printf("Failed to load symbol: %s\n", err);
return 2;
}
printf("Successfully retrieved symbol %s from library %s\n", symname, libname);
// Optional since we're existing, but good for testing:
if ((err = dlerror()) != NULL) {
printf("Failed to close lib during exit: %s\n", err);
return 2;
}
return 0;
}
Postregsがパッケージからインストールされています:
は、ここでのテストプログラムです。 libは私たち自身のものです。ソースはetchでうまくビルド/実行されますが、新しいサーバでビルドするとPostgresは説明どおりにエラーを出します。 Postgres 8.4は現在のSqueeze stbaleのリリースではありませんか?あなたが8.1を参照している場合、私はそれが古いです、それは私がアップグレードしようとしている理由知っている:) –
ああ、申し訳ありません。私はあなたが8.4に上っていたという事実を忘れてしまい、あなたがSqueezeであなたのコードを8.1にしようとしているという印象を受けました。 –
あなたのライブラリコードは 'g ++'または 'gcc'でコンパイルされていますか?システムに付属していない他のライブラリにリンクしていますか?単純なテストプログラムは問題なくライブラリをdlopenすることができます。つまり、PostgreSQLでロードされたときにのみ問題になるか、実際にカスタムライブラリをロードする際の問題ですか? –