I was curious if they can be merged together to an universal binary. The short answer: yes, they can.
It all starts with downloading the instant client zips for 32 and 64 binary. I loaded basic and sqlplus and unzipped them into 2 directories instantclient_11_2_32 and instantclient_11_2_64. I also created a target directory instantclient_11_2.
Then the simple script
for i in `ls instantclient_11_2_32` do lipo -create ~/instantclient_11_2_{32,64}/$i -output ~/instantclient_11_2/$i || cp ~/instantclient_11_2_64/$i ~/instantclient_11_2/$i done
did the work with this output:
lipo: can't figure out the architecture type of: /Users/berx/instantclient_11_2_32/BASIC_README lipo: can't figure out the architecture type of: /Users/berx/instantclient_11_2_32/SQLPLUS_README lipo: can't figure out the architecture type of: /Users/berx/instantclient_11_2_32/glogin.sql lipo: can't figure out the architecture type of: /Users/berx/instantclient_11_2_32/ojdbc5.jar lipo: can't figure out the architecture type of: /Users/berx/instantclient_11_2_32/ojdbc6.jar lipo: can't figure out the architecture type of: /Users/berx/instantclient_11_2_32/xstreams.jar
here what a simple file * shows:
BASIC_README: ASCII text SQLPLUS_README: ASCII text adrci: Mach-O universal binary with 2 architectures adrci (for architecture i386): Mach-O executable i386 adrci (for architecture x86_64): Mach-O 64-bit executable x86_64 genezi: Mach-O universal binary with 2 architectures genezi (for architecture i386): Mach-O executable i386 genezi (for architecture x86_64): Mach-O 64-bit executable x86_64 glogin.sql: ASCII English text libclntsh.dylib.11.1: Mach-O universal binary with 2 architectures libclntsh.dylib.11.1 (for architecture i386): Mach-O dynamically linked shared library i386 libclntsh.dylib.11.1 (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 libnnz11.dylib: Mach-O universal binary with 2 architectures libnnz11.dylib (for architecture i386): Mach-O dynamically linked shared library i386 libnnz11.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 libocci.dylib.11.1: Mach-O universal binary with 2 architectures libocci.dylib.11.1 (for architecture i386): Mach-O dynamically linked shared library i386 libocci.dylib.11.1 (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 libociei.dylib: Mach-O universal binary with 2 architectures libociei.dylib (for architecture i386): Mach-O bundle i386 libociei.dylib (for architecture x86_64): Mach-O 64-bit bundle x86_64 libocijdbc11.dylib: Mach-O universal binary with 2 architectures libocijdbc11.dylib (for architecture i386): Mach-O bundle i386 libocijdbc11.dylib (for architecture x86_64): Mach-O 64-bit bundle x86_64 libsqlplus.dylib: Mach-O universal binary with 2 architectures libsqlplus.dylib (for architecture i386): Mach-O dynamically linked shared library i386 libsqlplus.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 libsqlplusic.dylib: Mach-O universal binary with 2 architectures libsqlplusic.dylib (for architecture i386): Mach-O bundle i386 libsqlplusic.dylib (for architecture x86_64): Mach-O 64-bit bundle x86_64 ojdbc5.jar: Zip archive data, at least v1.0 to extract ojdbc6.jar: Zip archive data, at least v1.0 to extract sqlplus: Mach-O universal binary with 2 architectures sqlplus (for architecture i386): Mach-O executable i386 sqlplus (for architecture x86_64): Mach-O 64-bit executable x86_64 uidrvci: Mach-O universal binary with 2 architectures uidrvci (for architecture i386): Mach-O executable i386 uidrvci (for architecture x86_64): Mach-O 64-bit executable x86_64 xstreams.jar: Zip archive data, at least v1.0 to extract
Ok, now all the files are merged (or just copied) together.
Now let's check if 32 and 64 bit works.
I need this environment set:
export DYLD_LIBRARY_PATH=/Users/berx/instantclient_11_2 export PATH=$PATH:/Users/berx/instantclient_11_2
So let's thy the 32 bit version:
arch -arch i386 ./sqlplus SQL*Plus: Release 11.2.0.3.0 Production on Fri Feb 15 11:22:46 2013 Copyright (c) 1982, 2012, Oracle. All rights reserved. Enter user-name:
It looks good, just let's check if it's really running at 32 bit. Activity Monitor helps:
And the same thing for 64 bit:
arch -arch x86_64 sqlplus SQL*Plus: Release 11.2.0.3.0 Production on Fri Feb 15 11:38:23 2013 Copyright (c) 1982, 2012, Oracle. All rights reserved. Enter user-name:
So this can be seen as a short example how we can use only one ORACLE_HOME for 32 and 64 bit binaries on OSX.
But as always there is the usual disclaimer: It's not supported by Oracle; never do it on a production system (who is running anything Oracle-Related on OSX Server at all?); it's not tested with all the different applications which use oracle client.
Keine Kommentare:
Kommentar veröffentlichen