我正在編寫一個程序與USB硬件接口板交談,這需要一個小的JNI庫。我是我的編譯機器上運行10.5.8,並能成功地用下面的命令編譯共享庫JNI:使用MacOS爲PPC G3交叉編譯10.3.9
# Build shared library for K8055
g++ -x objective-c -fmessage-length=0 -pipe -Wno-trigraphs \
-fpascal-strings -fasm-blocks -O0 -mdynamic-no-pic -fvisibility=hidden -gdwarf-2 \
-Wmost -Wno-four-char-constants -Wno-unknown-pragmas \
-c ./K8055/K8055.m \
-o ./K8055/K8055.o \
-arch x86_64 \
-arch i386
echo "Building JNI shared library..."
gcc -c -m64 -I/System/Library/Frameworks/JavaVM.framework/Headers \
k8055usbio.m -o k8055usbio.so -arch x86_64
echo "Compiling dynamic library with both..."
g++ -m64 -dynamiclib -o ./lib/libk8055usbio.dylib \
k8055usbio.so ./K8055/K8055.o\
-framework Foundation -framework IOKit
我真的不明白我在做什麼這裏;我已經設法從很多谷歌搜索中拼湊出來。我的問題是:如何修改這個以編譯運行10.3.9的PPC G3機器?我很滿意的Java部分。以下是我試過到目前爲止:
# Build shared library for K8055 (PPC)
echo "Building driver shared library..."
g++ -x objective-c -fmessage-length=0 -pipe -Wno-trigraphs \
-fpascal-strings -fasm-blocks -O0 -mdynamic-no-pic -fvisibility=hidden -gdwarf-2 \
-Wmost -Wno-four-char-constants -Wno-unknown-pragmas \
-c ./K8055/K8055.m \
-o ./K8055/K8055.o \
-arch ppc
echo "Building JNI shared library..."
gcc -c -I/System/Library/Frameworks/JavaVM.framework/Headers \
k8055usbio.m -o k8055usbio.so -arch ppc
echo "Compiling dynamic library with both..."
gcc -shared -fPIC -o ./lib/libk8055usbio.dylib k8055usbio.so \
./K8055/K8055.o -framework Foundation -framework IOKit -arch ppc
但是當我嘗試System.load(),我從Java(1.5)程序得到以下錯誤:
dyld: java bad CPU subtype in library: /libk8055usbio.dylib
Trace/BPT trap
我不知道如何解決它,我應該指定什麼樣的CPU子類型?
通過添加'-arch i386`以及`-arch ppc`和10.4u SDK,您最終將得到一個通用二進制文件,該文件很可能在任何運行OS X 10.3.9的Mac上通過目前10.6。 – 2010-12-08 18:56:38