Кросс-компиляция для PPC G3 с MacOS 10.3.9 - PullRequest
2 голосов
/ 08 декабря 2010

Я пишу программу для связи с платой аппаратного интерфейса USB, для которой требуется небольшая библиотека 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

Я не совсем понимаю, что я здесь делаю;Мне удалось собрать это воедино из большого количества Google.Мой вопрос: как мне изменить это, чтобы компилировать для машины PPC G3 с 10.3.9?Часть 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

Понятия не имею, как это исправить, какой тип процессора я должен указать?

1 Ответ

5 голосов
/ 08 декабря 2010

Вам понадобится несколько вариантов. Во-первых, вы захотите явно указать SDK с помощью -isysroot, так как более новые 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, что для этого примера дает мне:

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

Ноль есть CPU_SUBTYPE_POWERPC_ALL, согласно /Developer/SDKs/MacOSX10.4u.sdk/usr/include/mach/machine.h.

...