Zowel de oorzaak van het probleem als een gemakkelijke oplossing werden duidelijk toen ik bin/pg_config
. uitvoerde op de opdrachtregel.
pg_config
genereert de variabelen die worden gebruikt om compilatie en koppeling te controleren. Van bijzonder belang zijn LIBDIR en LDFLAGS. LIBDIR specificeert de locatie voor statische bibliotheken, terwijl LDFLAGS locaties biedt om naar dynamische bibliotheken te zoeken. Op mijn systeem was LIBDIR correct ingesteld op /LibraryPostgreSQL/9.3/lib
, maar LDFLAGS was als volgt ingesteld:
LDFLAGS = -L../../../src/common -L/usr/local/lib -L/opt/local/20140109/lib -Wl,-dead-strip-dylibs
Sinds libpq.5.dylib
was niet aanwezig op een van deze locaties, de edelsteen kon het niet vinden en vond in plaats daarvan een oudere versie die toevallig was geïnstalleerd op /usr/lib
.
Een manier om dit op te lossen is door de juiste bestandslocatie in LDFLAGS te injecteren, mogelijk door de code in extconf.rb
aan te passen. dat het configuratiebestand genereert. Een veel eenvoudigere oplossing in dit geval is echter om een symbolische link toe te voegen in /usr/local/lib
naar de juiste bestandslocatie:
/usr/local/lib> ln -s /Library/PostgreSQL/9.3/lib/libpq.5.dylib libpq.5.dylib
Als je een soortgelijk probleem tegenkomt, bekijk dan gewoon de uitvoer van pg_config
, en kijk of je een symbolische link kunt plaatsen naar de juiste bestandslocatie in een van de mappen die al is gespecificeerd door LDFLAGS.