Ответ 1
Как причина проблемы, так и простое решение стали очевидными, когда я запускал bin/pg_config
в командной строке.
pg_config
генерирует переменные, которые используются для управления компиляцией и компоновкой. Особый интерес представляют LIBDIR и LDFLAGS. LIBDIR определяет местоположение для статических библиотек, в то время как LDFLAGS предоставляет места для поиска динамических библиотек. В моей системе LIBDIR был правильно установлен на /LibraryPostgreSQL/9.3/lib
, но LDFLAGS был установлен следующим образом:
LDFLAGS = -L../../../src/common -L/usr/local/lib -L/opt/local/20140109/lib -Wl,-dead-strip-dylibs
Так как libpq.5.dylib
не присутствовал ни в одном из этих мест, камень не смог его найти и вместо этого нашел более старую версию, которая была установлена в /usr/lib
.
Один из способов исправить это - это ввести правильное местоположение файла в LDFLAGS, возможно, изменив код в extconf.rb
, который генерирует файл конфигурации. Однако гораздо проще исправить в этом случае просто добавить символическую ссылку в /usr/local/lib
в правильное расположение файла:
/usr/local/lib> ln -s /Library/PostgreSQL/9.3/lib/libpq.5.dylib libpq.5.dylib
Если вы столкнулись с подобной проблемой, просто просмотрите вывод pg_config
и посмотрите, можете ли вы поместить символическую ссылку в правильное расположение файла в одном из каталогов, которые уже указаны LDFLAGS.