C ++在mac上使用linux库(x86_64-apple-darwin上的elf64-x86-64)

时间:2014-02-19 21:09:47

标签: c++ x86-64 elf

我目前正在尝试使用最初为Linux编译的库在Mac OS X(10.9)上编译程序。

有没有办法使用这个库?以下是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

2 个答案:

答案 0 :(得分:0)

Linux使用名为ELF的库格式。 Mac不使用ELF(相反,Mac使用一种名为Mach-O的格式),所以我怀疑这将是非常困难的(如果不是实际上不可能)。 可能能够使FreeBSD的Linux Binary Compatibility工作。

答案 1 :(得分:0)

您无法将ELF对象(或归档或共享库)与Mach-O链接。您可以尝试使用Agner Fog的objconv实用程序将x86-64 ELF转换为x86-64 Mach-O,它们使用相同的(ELF)调用约定。如果您可以从源代码编译,我不推荐这种方法。