Jak příčina problému, tak snadné řešení se ukázaly, když jsem spustil bin/pg_config
na příkazovém řádku.
pg_config
generuje proměnné, které se používají k řízení kompilace a propojování. Zvláště zajímavé jsou LIBDIR a LDFLAGS. LIBDIR určuje umístění pro statické knihovny, zatímco LDFLAGS poskytuje umístění pro vyhledávání dynamických knihoven. V mém systému byl LIBDIR správně nastaven na /LibraryPostgreSQL/9.3/lib
, ale LDFLAGS byl nastaven následovně:
LDFLAGS = -L../../../src/common -L/usr/local/lib -L/opt/local/20140109/lib -Wl,-dead-strip-dylibs
Od libpq.5.dylib
nebyl přítomen v žádném z těchto umístění, drahokam jej nenašel a místo toho našel starší verzi, která byla náhodou nainstalována na /usr/lib
.
Jedním ze způsobů, jak to vyřešit, by bylo vložit správné umístění souboru do LDFLAGS, možná úpravou kódu v extconf.rb
který vygeneruje konfigurační soubor. Mnohem jednodušší oprava v tomto případě je pouze přidat symbolický odkaz do /usr/local/lib
do správného umístění souboru:
/usr/local/lib> ln -s /Library/PostgreSQL/9.3/lib/libpq.5.dylib libpq.5.dylib
Pokud narazíte na podobný problém, prozkoumejte výstup pg_config
a zjistěte, zda můžete umístit symbolický odkaz na správné umístění souboru do jednoho z adresářů, který je již specifikován LDFLAGS.