小さなJNIライブラリが必要なUSBハードウェアインタフェースボードと通信するプログラムを書いています。私は、コンパイル・マシン上で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の部分。ここで私はこれまで試したものです:
dyld: java bad CPU subtype in library: /libk8055usbio.dylib
Trace/BPT trap
I:
# 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)プログラムから次のエラーを取得しようとすると、それを修正する方法がわからない、どのCPUサブタイプを指定するべきか?
'-arch ppc'と10.4u SDKと共に' -arch i386'を追加することで、OS X 10.3.9を実行するMacで動作する汎用バイナリになるはずです。電流10.6。 –
'otool -hv'(または' -hV')を使って、ほとんどのフィールドをデコードすることもできます。 –
ええ、明らかに私は-vを忘れていました。ありがとう! –