x86 64 — C ++ использует библиотеку linux на Mac (elf64-x86-64 на x86_64-apple-darwin)

В настоящее время я пытаюсь скомпилировать программу на 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

0

Решение

Linux использует формат библиотеки под названием ELF. Mac не использует ELF (вместо этого Mac использует формат, называемый Мачо), так что я подозреваю, что это будет очень сложно (если не вообще невозможно). Вы может быть быть в состоянии сделать Бинарная совместимость с Linux из FreeBSD работают.

0

Другие решения

Вы не можете связать объекты ELF (или архивы, или общие библиотеки) с Mach-O. Вы можете попробовать использовать Agner Fog’s objconv утилита, для преобразования x86-64 ELF в x86-64 Mach-O, которые используют те же (ELF) соглашения о вызовах. Я не рекомендовал бы такой подход, если вы можете скомпилировать из исходного кода.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector