Penyebab masalah dan solusi mudah menjadi jelas ketika saya menjalankan bin/pg_config
di baris perintah.
pg_config
menghasilkan variabel yang digunakan untuk mengontrol kompilasi dan penautan. Yang menarik adalah LIBDIR dan LDFLAGS. LIBDIR menentukan lokasi untuk perpustakaan statis, sementara LDFLAGS menyediakan lokasi untuk mencari perpustakaan dinamis. Di sistem saya, LIBDIR disetel dengan benar ke /LibraryPostgreSQL/9.3/lib
, tetapi LDFLAGS disetel sebagai berikut:
LDFLAGS = -L../../../src/common -L/usr/local/lib -L/opt/local/20140109/lib -Wl,-dead-strip-dylibs
Sejak libpq.5.dylib
tidak ada di salah satu lokasi ini, permata gagal menemukannya, dan malah menemukan versi lama yang kebetulan dipasang di /usr/lib
.
Salah satu cara untuk memperbaikinya adalah dengan menyuntikkan lokasi file yang benar ke LDFLAGS, mungkin dengan memodifikasi kode di extconf.rb
yang menghasilkan file konfigurasi. Namun, perbaikan yang jauh lebih mudah dalam kasus ini adalah dengan menambahkan symlink di /usr/local/lib
ke lokasi file yang benar:
/usr/local/lib> ln -s /Library/PostgreSQL/9.3/lib/libpq.5.dylib libpq.5.dylib
Jika Anda mengalami masalah serupa, periksa saja output pg_config
, dan lihat apakah Anda dapat menempatkan symlink ke lokasi file yang benar di salah satu direktori yang telah ditentukan oleh LDFLAGS.