2009-12-02 86 views
1

我正在運行64位Solaris 10,並且我在自己編譯的Perl 5.10和Postgresql 8.4.1中安裝了64位的/ usr/local。 Solaris附帶安裝在/ usr中的32位Postgresql 8.1.4,但未運行。當我嘗試安裝DBD :: Pg時,它遇到了一個問題,因爲它找到的libpq.so是/ usr/lib中的32位而不是/ usr/local/pgsql/lib中的64位。如何在Solaris上編譯用於Perl的64位Postgres綁定?

 
# /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的,但我讀過advice against that。我敢肯定,如果我開始使用32位Perl,一切都會奏效,但我更願意堅持我擁有的。

我注意到在CPAN輸出中,makefile在鏈接之前設置了LD_RUN_PATH =/usr/lib。這似乎應該改變,但我不知道如何改變它(因爲它全部由CPAN實現自動化),我不知道這種改變可能會產生什麼其他副作用。它看起來像正確的目錄/ usr/local/pgsql/lib,根本不在路徑上,所以也許只是使其可見即使沒有隱藏32位版本也能解決問題,但我不知道如何做到這一點,無論是。

我該如何在我擁有的環境中編譯該模塊,或者如何更改我的環境以便模塊按原樣編譯?

回答

3

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

簡單:

默認情況下Makefile.PL使用應用程序::信息找到 PostgreSQL庫的位置,包括目錄。但是,如果您想自己控制它,請定義環境變量POSTGRES_INCLUDE 和POSTGRES_LIB,或者只定義POSTGRES_HOME。請注意,如果您有 支持SSL編譯PostgreSQL的,你必須定義POSTGRES_LIB 環境變量,並添加 「-lssl」 給它,像這樣:

export POSTGRES_LIB="/usr/local/pgsql/lib -lssl" 
+0

設置'POSTGRES_HOME =在/ usr /本地/ pgsql裏'工作很好。無需刪除32位Postgres。謝謝。 – 2009-12-03 14:39:47