首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MacOS 10.3.9交叉编译PPC G3

使用MacOS 10.3.9交叉编译PPC G3
EN

Stack Overflow用户
提问于 2010-12-08 21:21:17
回答 1查看 388关注 0票数 2

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

代码语言:javascript
复制
# 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部分很满意。这是我到目前为止尝试过的:

代码语言:javascript
复制
# 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)程序中得到以下错误:

代码语言:javascript
复制
dyld: java bad CPU subtype in library: /libk8055usbio.dylib
Trace/BPT trap

我不知道如何修复它,我应该指定什么CPU子类型?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-08 22:36:41

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

代码语言:javascript
复制
gcc-4.0 -arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk/ -mmacosx-version-min=10.3 -o testprog testarch.c

您可以使用otool -h检查报头中的CPU类型/子类型,对于本例,它给出了以下信息:

代码语言:javascript
复制
$ 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。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4387889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档