В настоящее время я пытаюсь скомпилировать программу на Mac OS X (10.9), используя библиотеку, изначально скомпилированную для Linux.
Есть ли способ использовать эту библиотеку? Вот вывод objdump -f libmylib.a
:
Hour.o: file format elf64-x86-64
architecture: i386:x86-64, flags 0x00000011:
HAS_RELOC, HAS_SYMS
start address 0x0000000000000000Menu.o: file format elf64-x86-64
architecture: i386:x86-64, flags 0x00000011:
HAS_RELOC, HAS_SYMS
start address 0x0000000000000000Tools.o: file format elf64-x86-64
architecture: i386:x86-64, flags 0x00000011:
HAS_RELOC, HAS_SYMS
start address 0x0000000000000000
Я знаю, что моя нынешняя архитектура x86_64-apple-darwin13.0.0
, и мне интересно, если с соответствующими флагами компилятора, есть способ сделать эту компиляцию.
Еще одна вещь, здесь ошибка при попытке компиляции:
g++ -L /Users/gustavemonod/Desktop/ -o Parking Mother.o Keyboard.o -lncurses -ltcl -lmylib
ld: warning: ignoring file /Users/gustavemonod/lib/libmylib.a, file was built for archive which is not the architecture being linked (x86_64): /Users/gustavemonod/lib/libmylib.a
Linux использует формат библиотеки под названием ELF. Mac не использует ELF (вместо этого Mac использует формат, называемый Мачо), так что я подозреваю, что это будет очень сложно (если не вообще невозможно). Вы может быть быть в состоянии сделать Бинарная совместимость с Linux из FreeBSD работают.
Вы не можете связать объекты ELF (или архивы, или общие библиотеки) с Mach-O. Вы можете попробовать использовать Agner Fog’s objconv утилита, для преобразования x86-64 ELF в x86-64 Mach-O, которые используют те же (ELF) соглашения о вызовах. Я не рекомендовал бы такой подход, если вы можете скомпилировать из исходного кода.