Как я могу скомпилировать 64-битные привязки Postgres для Perl в Solaris? - PullRequest
1 голос
/ 03 декабря 2009

Я использую 64-разрядную версию Solaris 10, и у меня есть самоскомпилированные Perl 5.10 и Postgresql 8.4.1, установленные в / usr / local, обе 64-разрядные. Solaris поставляется с 32-битным Postgresql 8.1.4, установленным в / usr, но он не работает. Когда я пытаюсь установить DBD :: Pg, он сталкивается с проблемой, потому что найденный libpq.so является 32-битным в / usr / lib, а не 64-битным в /usr/local/pgsql/lib.

# /usr/local/bin/cpanp -i DBD::Pg
Installing DBD::Pg (2.15.1)
...
ld: fatal: file /usr/lib/libpq.so: wrong ELF class: ELFCLASS32

Моей первой мыслью было удалить пакет Postgres, но я прочитал совет против этого . Я уверен, что все будет работать, если я начну заново с 32-битным Perl, но я бы предпочел придерживаться того, что у меня есть.

Я заметил в выводе CPAN, что make-файл устанавливает LD_RUN_PATH = / usr / lib перед компоновкой. Это похоже на то, что должно измениться, но я не знаю, как это изменить (поскольку все это автоматизировано CPAN), и я не знаю, какие другие побочные эффекты могут иметь такие изменения. Похоже, что правильный каталог / usr / local / pgsql / lib вообще не находится на пути, так что, возможно, просто сделать его видимым, чтобы решить проблему, даже не скрывая 32-битную версию, но я не знаю как это сделать, либо.

Как мне скомпилировать этот модуль в моей среде, или как я могу изменить свою среду, чтобы модуль компилировался как есть?

1 Ответ

3 голосов
/ 03 декабря 2009

С http://cpansearch.perl.org/src/TURNSTEP/DBD-Pg-2.15.1/Makefile.PL

Вкратце:

По умолчанию Makefile.PL использует App :: Info, чтобы найти местоположение Библиотека PostgreSQL и включает каталоги. Однако, если вы хотите управляй им сам, определяй переменные окружения POSTGRES_INCLUDE и POSTGRES_LIB, или определите просто POSTGRES_HOME. Обратите внимание, что если у вас есть скомпилированный PostgreSQL с поддержкой SSL, вы должны определить POSTGRES_LIB переменную окружения и добавьте к ней «-lssl», например:

export POSTGRES_LIB="/usr/local/pgsql/lib -lssl"
...