2012-01-27 75 views
1

我在Ubuntu中安裝了64位構建環境。假設我下載了某個庫的源代碼,並且希望使用單一源代碼構建它的32位和64位版本。製作32位和64位版本的庫的指南(在Linux中)

庫自帶./configure腳本,有人可能會成功地將其配置爲64位版本是這樣的:

./configure --prefix=/opt/libtvzombie --with-opengl --with-other-option1 

...構建並把它安裝到/opt/libtvzombie如下:

make 
sudo make install 
sudo sh -c 'echo /opt/libtvzombie/lib > /etc/ld.so.conf.d/tvzombie.conf' 
sudo ldconfig 

問題是:

  1. 如何強制平均./configure腳本在64位系統上以32位模式編譯?我知道我可以在g ++中使用-m32編譯開關,但這不是自動工具的方式,因爲./configure認識到我正在64位環境中編譯。

  2. 我需要在哪裏安裝這個32位版本?也許到/opt/libzombie32

  3. 在同名的庫的32位和64位版本之間不會有任何名稱衝突嗎?

回答

2

如果要安裝在/ opt/libzombie32中,只需指定--prefix =/opt/libzombie32並在CFLAGS中指定-m32即可。就個人而言,我認爲這是一個壞主意,在每個包一個單獨的目錄安裝,你會更好做這樣的事情:

 
$ sudo sh -c 'echo CFLAGS="$CFLAGS -m32" > /opt/lib32/share/config.site' 

然後用--prefix = /選擇/ LIB32配置。通過在config.site中指定CFLAGS,任何使用--prefix =/opt/lib32配置的自動處理項目都將在CFLAGS中指定-m32。你也可以指定CXXFLAGS來處理C++。

+0

感謝您的回答!據我瞭解'config.site'中的選項會被'./configure'腳本自動獲取,對吧? – ezpresso 2012-01-27 18:00:59

+0

難道你不是指'--libdir =/opt/lib32而不是'--prefix =/opt/lib32'嗎? – ezpresso 2012-01-27 18:05:55

+0

@ezpresso是的,但只適用於--prefix =/opt/lib32的軟件包 – 2012-01-27 18:06:03

4

由於configure不知道-m32標誌的含義是「32位」(畢竟,它可能意味着與另一個編譯器完全不同的東西 - 甚至可能會被拒絕,例如在ia64上),您還應該告訴它主機類型。如果程序是這樣編碼的,主機類型也可用於選擇獨立於CC和CFLAGS的某些行爲,如果要運行的配置不是自動檢測的配置,則應始終指定--host =。

./configure --host=i686-linux-gnu CFLAGS="-m32" LDFLAGS="-m32"