PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Ruby 'pg' Gem verlinkt auf falsche Kopie von libpq.5.dylib (unter OSX)

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.