sql >> Database >  >> RDS >> PostgreSQL

Ruby 'pg' gem linkt naar verkeerde kopie van libpq.5.dylib (op OSX)

Zowel de oorzaak van het probleem als een gemakkelijke oplossing werden duidelijk toen ik bin/pg_config . uitvoerde op de opdrachtregel.

pg_config genereert de variabelen die worden gebruikt om compilatie en koppeling te controleren. Van bijzonder belang zijn LIBDIR en LDFLAGS. LIBDIR specificeert de locatie voor statische bibliotheken, terwijl LDFLAGS locaties biedt om naar dynamische bibliotheken te zoeken. Op mijn systeem was LIBDIR correct ingesteld op /LibraryPostgreSQL/9.3/lib , maar LDFLAGS was als volgt ingesteld:

LDFLAGS = -L../../../src/common -L/usr/local/lib -L/opt/local/20140109/lib -Wl,-dead-strip-dylibs

Sinds libpq.5.dylib was niet aanwezig op een van deze locaties, de edelsteen kon het niet vinden en vond in plaats daarvan een oudere versie die toevallig was geïnstalleerd op /usr/lib .

Een manier om dit op te lossen is door de juiste bestandslocatie in LDFLAGS te injecteren, mogelijk door de code in extconf.rb aan te passen. dat het configuratiebestand genereert. Een veel eenvoudigere oplossing in dit geval is echter om een ​​symbolische link toe te voegen in /usr/local/lib naar de juiste bestandslocatie:

/usr/local/lib> ln -s /Library/PostgreSQL/9.3/lib/libpq.5.dylib libpq.5.dylib

Als je een soortgelijk probleem tegenkomt, bekijk dan gewoon de uitvoer van pg_config , en kijk of je een symbolische link kunt plaatsen naar de juiste bestandslocatie in een van de mappen die al is gespecificeerd door LDFLAGS.




  1. De volgorde van een SQL Select-instructie zonder Order By-clausule

  2. Verborgen prestatie- en beheersverbeteringen in SQL Server 2012/2014

  3. Patchgeschiedenistabellen in Oracle Apps (11i/R12.1/R12.2)

  4. MySQL:#126 - Onjuist sleutelbestand voor tabel