Både årsagen til problemet og en nem løsning blev tydelig, da jeg kørte bin/pg_config
på kommandolinjen.
pg_config
genererer de variable, der bruges til at kontrollere kompilering og linkning. Af særlig interesse er LIBDIR og LDFLAGS. LIBDIR angiver placeringen for statiske biblioteker, mens LDFLAGS giver placeringer til at søge efter dynamiske biblioteker. På mit system var LIBDIR indstillet korrekt til /LibraryPostgreSQL/9.3/lib
, men LDFLAGS blev sat som følger:
LDFLAGS = -L../../../src/common -L/usr/local/lib -L/opt/local/20140109/lib -Wl,-dead-strip-dylibs
Siden libpq.5.dylib
ikke var til stede på nogen af disse steder, kunne ædelstenen ikke finde den og fandt i stedet en ældre version, der tilfældigvis var installeret på /usr/lib
.
En måde at løse dette på ville være at injicere den korrekte filplacering i LDFLAGS, muligvis ved at ændre koden i extconf.rb
der genererer konfigurationsfilen. Men en meget lettere løsning i dette tilfælde er blot at tilføje et symbollink i /usr/local/lib
til den korrekte filplacering:
/usr/local/lib> ln -s /Library/PostgreSQL/9.3/lib/libpq.5.dylib libpq.5.dylib
Hvis du støder på et lignende problem, skal du bare undersøge outputtet af pg_config
, og se om du kan placere et symbollink til den korrekte filplacering i en af de mapper, der allerede er angivet af LDFLAGS.