Både orsaken till problemet och en enkel lösning blev uppenbar när jag körde bin/pg_config
på kommandoraden.
pg_config
genererar de variabler som används för att styra kompilering och länkning. Av särskilt intresse är LIBDIR och LDFLAGS. LIBDIR anger platsen för statiska bibliotek, medan LDFLAGS tillhandahåller platser för att söka efter dynamiska bibliotek. På mitt system var LIBDIR korrekt inställt på /LibraryPostgreSQL/9.3/lib
, men LDFLAGS ställdes in enligt följande:
LDFLAGS = -L../../../src/common -L/usr/local/lib -L/opt/local/20140109/lib -Wl,-dead-strip-dylibs
Sedan libpq.5.dylib
inte fanns på någon av dessa platser, ädelstenen kunde inte hitta den och hittade istället en äldre version som råkade vara installerad på /usr/lib
.
Ett sätt att fixa detta skulle vara att injicera korrekt filplats i LDFLAGS, eventuellt genom att modifiera koden i extconf.rb
som genererar konfigurationsfilen. Men en mycket enklare lösning i det här fallet är bara att lägga till en symbollänk i /usr/local/lib
till rätt filplats:
/usr/local/lib> ln -s /Library/PostgreSQL/9.3/lib/libpq.5.dylib libpq.5.dylib
Om du stöter på ett liknande problem, undersök bara utdata från pg_config
, och se om du kan placera en symbollänk till rätt filplats i en av katalogerna som redan är specificerad av LDFLAGS.