Postgres 10をバージョン11にアップグレードした後、pg_upgrade
を使用すると、次のエラーが発生します。
ライブラリ "$ libdir/postgis-2.4"を読み込めませんでした:エラー:ライブラリ "/usr/pgsql-11/lib/postgis-2.4.so"を読み込めませんでした:/usr/pgsql-11/lib/postgis-2.4.so :未定義のシンボル:geod_polygon_init
CentOS 7とPostgis 2.4を使用しています。
少し調べてみました。
# nm -D /usr/pgsql-11/lib/postgis-2.4.so |grep geod_polygon_init
U geod_polygon_init
関数は共有ライブラリによってエクスポートされます!このエラーが発生するのはなぜですか?
# ld -v /usr/pgsql-11/lib/postgis-2.4.so
GNU ld version 2.27-28.base.el7_5.1
ld: warning: cannot find entry symbol _start; not setting start address
/usr/pgsql-11/lib/postgis-2.4.so: undefined reference to `repalloc'
/usr/pgsql-11/lib/postgis-2.4.so: undefined reference to `hash_create'
/usr/pgsql-11/lib/postgis-2.4.so: undefined reference to `get_guc_variables'
/usr/pgsql-11/lib/postgis-2.4.so: undefined reference to `init_MultiFuncCall'
/usr/pgsql-11/lib/postgis-2.4.so: undefined reference to `SPI_exec'
/usr/pgsql-11/lib/postgis-2.4.so: undefined reference to `WinGetFuncArgInPartition'
/usr/pgsql-11/lib/postgis-2.4.so: undefined reference to `SPI_gettype'
/usr/pgsql-11/lib/postgis-2.4.so: undefined reference to `geod_polygon_addpoint'
/usr/pgsql-11/lib/postgis-2.4.so: undefined reference to `get_fn_expr_argtype'
/usr/pgsql-11/lib/postgis-2.4.so: undefined reference to `GetDatabaseEncoding'
/usr/pgsql-11/lib/postgis-2.4.so: undefined reference to `SPI_execute'
/usr/pgsql-11/lib/postgis-2.4.so: undefined reference to `CurrentMemoryContext'
/usr/pgsql-11/lib/postgis-2.4.so: undefined reference to `SPI_getvalue'
...
関連する質問:
Postgisのソースコード2.4.5をダウンロードして自分でコンパイルしたところ、問題なく動作します。
ぼくの postgis-2.4.so
は、yum
によって提供されるものよりもはるかに大きい、2.4 Mb対750 Mb。他の生成されたライブラリからも同じことが言えます。
# ld -v /usr/pgsql-11/lib/postgis-2.4.so
GNU ld version 2.27-28.base.el7_5.1
ld: warning: cannot find entry symbol _start; not setting start address
/usr/pgsql-11/lib/postgis-2.4.so: undefined reference to `repalloc'
/usr/pgsql-11/lib/postgis-2.4.so: undefined reference to `hash_create'
それは実際には問題ではありません。そのようにldを使用することはできません。そこでldd
を使用したいと思います。これは共有オブジェクトであり、実行可能ファイルではありません。 _start
(または-e
のエントリポイント)がないと、ld
を呼び出して実行可能ファイルを生成できません
ライブラリ "$ libdir/postgis-2.4"を読み込めませんでした:エラー:ライブラリ "/usr/pgsql-11/lib/postgis-2.4.so"を読み込めませんでした:/usr/pgsql-11/lib/postgis-2.4.so :未定義のシンボル:geod_polygon_init
そのエラーは、古すぎるバージョンのProj4に対してリンクしていると私が考えているためです。どちらかといえば、それはディストリビューションの問題です。