Sowohl die Ursache des Problems als auch eine einfache Lösung wurden offensichtlich, als ich bin/pg_config
ausführte auf der Kommandozeile.
pg_config
generiert die Variablen, die zum Steuern der Kompilierung und Verknüpfung verwendet werden. Von besonderem Interesse sind LIBDIR und LDFLAGS. LIBDIR gibt den Speicherort für statische Bibliotheken an, während LDFLAGS Speicherorte für die Suche nach dynamischen Bibliotheken bereitstellt. Auf meinem System wurde LIBDIR korrekt auf /LibraryPostgreSQL/9.3/lib
gesetzt , aber LDFLAGS wurde wie folgt gesetzt:
LDFLAGS = -L../../../src/common -L/usr/local/lib -L/opt/local/20140109/lib -Wl,-dead-strip-dylibs
Seit libpq.5.dylib
an keinem dieser Orte vorhanden war, konnte der Gem ihn nicht finden und fand stattdessen eine ältere Version, die zufällig unter /usr/lib
installiert war .
Eine Möglichkeit, dies zu beheben, wäre, den richtigen Dateispeicherort in LDFLAGS einzufügen, möglicherweise durch Modifizieren des Codes in extconf.rb
die die Konfigurationsdatei generiert. Eine viel einfachere Lösung in diesem Fall besteht jedoch darin, einfach einen Symlink in /usr/local/lib
hinzuzufügen an den richtigen Speicherort:
/usr/local/lib> ln -s /Library/PostgreSQL/9.3/lib/libpq.5.dylib libpq.5.dylib
Wenn Sie auf ein ähnliches Problem stoßen, untersuchen Sie einfach die Ausgabe von pg_config
, und prüfen Sie, ob Sie einen Symlink zum richtigen Dateispeicherort in einem der Verzeichnisse platzieren können, das bereits von LDFLAGS angegeben ist.