從11.2版起,Oracle取消了ORACLE_HOME下的lib32 Directory,從32/64bit的雙軌制徹底走向64bit的單軌路線。
對於一些還希望使用32bit的人,解決問題的辦法就是再安裝一個32bit的Oracle Client。(當然,這回生成另一個ORACLE HOME。這應該沒問題,可惜我沒試過。)
但是,我遇到的問題是,用戶希望升級到64bit,從原來的cc更換到gcc,但又不願修改大量的make文件。
1. 安裝gcc package。
首先搜索gcc。
# pkg search gcc
INDEX ACTION VALUE PACKAGE
pkg.description set GCC Runtime - Shared libraries used by gcc and other gnu components pkg:/system/library/[email protected]
pkg.summary set GCC Runtime libraries pkg:/system/library/[email protected]
pkg.summary set GCC - 4.5 Compilers pkg:/developer/[email protected]
pkg.summary set GCC - 4.5 Runtime pkg:/system/library/[email protected]
basename hardlink usr/sfw/bin/gcc pkg:/developer/[email protected]
basename link usr/bin/gcc pkg:/developer/[email protected]
pkg.description set GCC Runtime - Shared libraries used by gcc and other gnu components pkg:/system/library/[email protected]
pkg.summary set gcc - The GNU C compiler pkg:/developer/[email protected]
basename dir usr/gcc pkg:/system/library/[email protected]
basename dir usr/gcc/4.5/lib/gcc pkg:/system/library/[email protected]
basename dir usr/sfw/lib/gcc pkg:/developer/[email protected]
basename dir usr/sfw/libexec/gcc pkg:/developer/[email protected]
basename dir usr/gcc pkg:/developer/[email protected]
basename dir usr/gcc/4.5/lib/gcc pkg:/developer/[email protected]
basename file usr/gcc/4.5/bin/gcc pkg:/developer/[email protected]
這裏給出了好幾個版本的gcc Package信息。
比如,你想安裝3.4.3版的gcc compiler。
# pkg install pkg:/developer/[email protected]
2. 爲了不修改make文件而做的一個cc文件
下面是一個使用Unix原裝cc的Make文件的例子(部分)。
# makefile
PROC = proc
CC = cc
INCLUDE = -I ${ORACLE_HOME}/precomp/public -I ../inc
INC = ${HOME}/JBP/src/inc/
OBJ = ${HOME}/JBP/src/obj/
......
安裝的gcc在哪裏?
#which gcc
/usr/sfw/bin/gcc
做個cc文件,其內容超簡單:
/usr/sfw/bin/gcc -m64 $*
注意,這裏的 -m64, 它指示gcc生成64bit編譯代碼。
$* 則接收cc 之後的一切參數。
cc必須可執行。
# ls -l cc
-rwxr-xr-x 1 root root 25 Nov 6 14:21 cc
3. 驗證
$ echo $SHELL
/usr/bin/bash
$ echo $PATH
/usr/bin:/usr/sbin:/usr/sfw/bin
$ which cc
/usr/sfw/bin/cc
$ more test.c
#include <stdio.h>
int main(void){
printf("Content-type: text/plain\n\n");
printf("Hello, World!");
return 0;
}
$ cc test.c
$ ls -ltr
total 15
-rw-r--r-- 1 zhang staff 130 11月 5日 17:46 test.c
-rwxr-xr-x 1 zhang staff 9992 11月 7日 13:11 a.out
$ file a.out
a.out: ELF 64-bit LSB executable AMD64 Version 1, dynamically linked, not stripped, no debugging information available
可見,使用gcc的別名產生的Object文件是64bit。
同理,使用make文件的編譯鏈接也未見異常。