Cả nguyên nhân của sự cố và giải pháp dễ dàng đều trở nên rõ ràng khi tôi chạy bin/pg_config
tại dòng lệnh.
pg_config
tạo ra các biến được sử dụng để kiểm soát quá trình biên dịch và liên kết. Đặc biệt quan tâm là LIBDIR và LDFLAGS. LIBDIR chỉ định vị trí cho các thư viện tĩnh, trong khi LDFLAGS cung cấp các vị trí để tìm kiếm các thư viện động. Trên hệ thống của tôi, LIBDIR đã được đặt chính xác thành /LibraryPostgreSQL/9.3/lib
, nhưng LDFLAGS được đặt như sau:
LDFLAGS = -L../../../src/common -L/usr/local/lib -L/opt/local/20140109/lib -Wl,-dead-strip-dylibs
Kể từ libpq.5.dylib
không có mặt tại bất kỳ vị trí nào trong số này, không tìm thấy viên đá quý và thay vào đó họ tìm thấy một phiên bản cũ hơn đã được cài đặt tại /usr/lib
.
Một cách để khắc phục điều này là đưa vị trí tệp chính xác vào LDFLAGS, có thể bằng cách sửa đổi mã trong extconf.rb
tạo tệp cấu hình. Tuy nhiên, cách khắc phục dễ dàng hơn nhiều trong trường hợp này là chỉ cần thêm liên kết biểu tượng trong /usr/local/lib
đến đúng vị trí tệp:
/usr/local/lib> ln -s /Library/PostgreSQL/9.3/lib/libpq.5.dylib libpq.5.dylib
Nếu bạn gặp sự cố tương tự, chỉ cần kiểm tra đầu ra của pg_config
và xem liệu bạn có thể đặt một liên kết tượng trưng đến đúng vị trí tệp trong một trong các thư mục đã được LDFLAGS chỉ định hay không.