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

0

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


Menu.o:       file format elf64-x86-64
architecture: i386:x86-64, flags 0x00000011:
HAS_RELOC, HAS_SYMS
start address 0x0000000000000000


Tools.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
  • 1
    Можете ли вы перекомпилировать mylib для OS X?
  • 0
    Это заняло бы больше, чем правильные флаги компилятора, и если вы просто хотите что-то, что работает, вероятно, есть более простые способы (например, собрать lib для os x). Но это может быть интересный проект. Я думаю, что как часть llvm или lldb есть библиотека для чтения / записи объектных файлов, которая может загрузить объектный файл (elf, mach-o или coff) в своего рода общее представление, и тогда вы сможете заставить его работать вывести объектный файл в другом формате.
Показать ещё 1 комментарий
Теги:
x86-64
elf

2 ответа

0

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

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню