2014-02-19 2 views
0

현재 Linux 용으로 컴파일 된 라이브러리를 사용하여 Mac OS X (10.9)에서 프로그램을 컴파일하려고합니다.C++은 Mac에서 Linux 라이브러리를 사용합니다 (x86_64-apple-darwin의 elf64-x86-64)

이 라이브러리를 사용할 방법이 있습니까? 여기 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

OS X 용 mylib를 다시 컴파일 할 수 있습니까? –

+0

올바른 컴파일러 플래그 이상을 필요로하며, 작동하는 무언가를 원한다면 더 쉬운 방법이있을 수 있습니다 (예 : os x 용 lib 빌드). 그러나 흥미로운 프로젝트 일 수 있습니다. 나는 llvm 또는 lldb의 일부로 객체 파일 (elf, mach-o 또는 coff)을 일종의 일반적인 표현으로로드 할 수있는 객체 파일 판독기/기록기 라이브러리가 있다고 생각합니다. 그런 다음이를 작동시킬 수 있습니다 다른 형식의 오브젝트 파일을 출력 할 수 있습니다. – bames53

+0

@AlexReynolds 아쉽게도 소스에 액세스 할 수 없어서 **이 라이브러리를 다시 컴파일 할 수 없습니다. –

답변

0

리눅스는 ELF라는 라이브러리 형식을 사용합니다. Mac은 ELF를 사용하지 않습니다 (대신 Mac에서는 Mach-O이라는 형식을 사용함). 실제로 불가능하지는 않더라도 매우 어려울 것으로 생각됩니다. 은 FreeBSD에서 Linux Binary Compatibility을 만들 수 있습니다.

0

ELF 개체 (또는 아카이브 또는 공유 라이브러리)를 Mach-O와 연결할 수 없습니다. Agner Fog의 objconv 유틸리티를 사용하여 같은 ELF 호출 규칙을 사용하는 x86-64 ELF를 x86-64 Mach-O로 변환 할 수 있습니다. 소스에서 컴파일 할 수있는 경우이 방법을 사용하지 않는 것이 좋습니다.