La cause du problème et une solution simple sont devenues évidentes lorsque j'ai exécuté bin/pg_config
sur la ligne de commande.
pg_config
génère les variables qui sont utilisées pour contrôler la compilation et la liaison. LIBDIR et LDFLAGS sont particulièrement intéressants. LIBDIR spécifie l'emplacement des bibliothèques statiques, tandis que LDFLAGS fournit des emplacements pour rechercher des bibliothèques dynamiques. Sur mon système, LIBDIR était correctement défini sur /LibraryPostgreSQL/9.3/lib
, mais LDFLAGS a été défini comme suit :
LDFLAGS = -L../../../src/common -L/usr/local/lib -L/opt/local/20140109/lib -Wl,-dead-strip-dylibs
Depuis libpq.5.dylib
n'était présent à aucun de ces emplacements, la gemme n'a pas réussi à le trouver et a trouvé à la place une version plus ancienne qui s'est avérée être installée à /usr/lib
.
Une façon de résoudre ce problème serait d'injecter l'emplacement de fichier correct dans LDFLAGS, éventuellement en modifiant le code dans extconf.rb
qui génère le fichier de configuration. Cependant, une solution beaucoup plus simple dans ce cas consiste simplement à ajouter un lien symbolique dans /usr/local/lib
au bon emplacement de fichier :
/usr/local/lib> ln -s /Library/PostgreSQL/9.3/lib/libpq.5.dylib libpq.5.dylib
Si vous rencontrez un problème similaire, examinez simplement la sortie de pg_config
, et voyez si vous pouvez placer un lien symbolique vers l'emplacement correct du fichier dans l'un des répertoires déjà spécifiés par LDFLAGS.