Както причината за проблема, така и лесното решение станаха очевидни, когато стартирах 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.