Zarówno przyczyna problemu, jak i łatwe rozwiązanie stały się oczywiste, gdy uruchomiłem bin/pg_config
w wierszu poleceń.
pg_config
generuje zmienne używane do sterowania kompilacją i łączeniem. Szczególnie interesujące są LIBDIR i LDFLAGS. LIBDIR określa lokalizację bibliotek statycznych, podczas gdy LDFLAGS zapewnia lokalizacje wyszukiwania bibliotek dynamicznych. W moim systemie LIBDIR został poprawnie ustawiony na /LibraryPostgreSQL/9.3/lib
, ale LDFLAGS został ustawiony w następujący sposób:
LDFLAGS = -L../../../src/common -L/usr/local/lib -L/opt/local/20140109/lib -Wl,-dead-strip-dylibs
Od libpq.5.dylib
nie był obecny w żadnej z tych lokalizacji, klejnot nie znalazł go, a zamiast tego znalazł starszą wersję, która akurat była zainstalowana w /usr/lib
.
Jednym ze sposobów naprawienia tego byłoby wstrzyknięcie poprawnej lokalizacji pliku do LDFLAGS, prawdopodobnie poprzez modyfikację kodu w extconf.rb
który generuje plik konfiguracyjny. Jednak o wiele łatwiejszym rozwiązaniem w tym przypadku jest dodanie dowiązania symbolicznego w /usr/local/lib
do właściwej lokalizacji pliku:
/usr/local/lib> ln -s /Library/PostgreSQL/9.3/lib/libpq.5.dylib libpq.5.dylib
Jeśli napotkasz podobny problem, po prostu sprawdź dane wyjściowe pg_config
i sprawdź, czy możesz umieścić dowiązanie symboliczne do właściwej lokalizacji pliku w jednym z katalogów, które są już określone przez LDFLAGS.