gpt4 book ai didi

java - PPC G3 与 MacOS 10.3.9 的交叉编译

转载 作者:行者123 更新时间:2023-11-30 06:36:47 26 4
gpt4 key购买 nike

我正在编写一个程序来与 USB 硬件接口(interface)板对话,这需要一个小型 JNI 库。我在我的编译机器上运行 10.5.8,并且可以使用以下命令成功编译 JNI 的共享库:

# 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 子类型?

最佳答案

您需要摆弄几个选项。首先,您需要使用 -isysroot 明确指定一个 SDK,因为较新的 SDK 会以各种方式颠覆您。其次,您需要传递 -mmacosx-version-min=10.3 以表明您确实希望在 10.3 上运行。在一个小测试程序上使用这两个选项,我得到一个二进制文件,声称它应该在 G3 上运行。这是我的命令行:

gcc-4.0 -arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk/ -mmacosx-version-min=10.3 -o testprog testarch.c

您可以使用 otool -h 对 header 中的 CPU 类型/子类型进行完整性检查,对于本示例,它给出了我:

$ otool -h testprogtestprog:
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
0xfeedface 18 0 0x00 2 11 1268 0x00000085

根据/Developer/SDKs/MacOSX10.4u.sdk/usr/include/mach/machine.h,零是 CPU_SUBTYPE_POWERPC_ALL。

关于java - PPC G3 与 MacOS 10.3.9 的交叉编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4387889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com