Jak odstranit otravný undefined symbol: lo_import_with_oid

16. prosince 2010 v 15:55 | PaulMan |  Počítadla
Týká se kompilace PHP 5.3.x oproti kompilovanému PostgreSQL 8.4.x.


Tenhle článeček píšu spíš jako poznámku pro sebe, ale zároveň ho píšu na blog, abych svým kolegům ušetřil náročné detektivní pátrání po fórech. Mí čtenáři mimo obor ho můžou s klidem ignorovat :)

V poslední době jsem několikrát narazil na problém při kompilaci PHP 5.3.[3,4] ze zdrojáků oproti stejně sestavené databázi PostgreSQL 8.4.[4,5]. Problém se vyskytuje při sestavování modulu pro Apache na Debianu 5.0 v obou bitových verzích.

Svatá trojice proběhne u obou kompilovaných komponent v pořádku, ale při pokusu o načtení modulu Apache padá s hláškou:

/usr/lib/apache2/modules/libphp5.so: undefined symbol: lo_import_with_oid

Je to trochu frustrující a mezi jednotlivými výskyty jsem vždycky stihl zapomenout, jak jsem to vlastně vyřešil. Googlování tohohle konkrétního problému je celkem náročné, takže si tu píšu, abych už šel příště najisto:

Problém způsobuje knihovna libpq.so, obsažená ve verzi 5.1 v balíku libpq-dev, který se do systému instaluje v rámci závislostí. Kompilovaný Postgres má vlastní knihovnu libpq.so ve verzi 5.2 a právě souběžná existence obou knihoven způsobuje imbecilní chování apacháckého PHP modulu.
Balíkovou knihovnu (v /usr/lib/) není možné prostě smazat, Apache pak odmítá startovat. Řešení spočívá v jejím nahrazení (včetně verzovacích symlinků) knihovnou z kompilovaného Postgresu (v /usr/local/pgsql/lib/).

Voilá, a Apache poslušně schroustne zkompilovaný PHP modul :)

Nový komentář

Přihlásit se
  Ještě nemáte vlastní web? Můžete si jej zdarma založit na Blog.cz.