2011-12-14 1 views
5

애플은 GCC 4.6이나 GCC 4.7을 지원하지 않기 때문에 MacPorts의 GCC 4.6/4.7 빌드로 전환했습니다. 그러나 "유니버설"아키텍처에서 코드를 작성하는 데 문제가있었습니다.Macports의 GCC를 사용하여 범용 코드를 컴파일 할 수 있습니까?

전통적으로 적어도 i386/x86_64 아키텍처에서 내 바이너리를 컴파일하려면 g++ -arch i386 -arch x86_64 ...을 수행 할 것입니다. 나는 몇몇 검색을했고, -arch 옵션은 apple의 컴파일러에 의해서만 지원된다는 것을 깨달았다. 물론 맥 포트에서는 작동하지 않습니다. ' 내가 할 수있는 최선의 방법은 원하는 아키텍처를 지정하는 옵션 -m32/-m64을 사용하는 것입니다. 그러나 i386 또는 x86_64 형식의 binary binary 만 생성합니다. 필자가 원했던 것은 원래의 GCC 컴파일러와 마찬가지로 두 아키텍처에서 모두 바이너리 파일 (Universal)을 얻는 것이다.

이 정보는 지원되지 않거나 알려진 문제입니까? 나는 밤새도록 구글에서 답을 찾고자했지만, 아무 것도 쓸모가 없다. 그래서 나는이 문제가있는 유일한 사람인지 의심스러워하기 시작합니다. 그리고 그 문제를 해결하기 위해 정말 중요한 것을 놓쳤습니다. 아무도 나에게 제안을 해줄 수 있다면 정말 고마워.

BTW. gcc46 +universal 변종을 설치했지만 각 아키텍처마다 별도의 바이너리를 컴파일하는 것 외에는 아무런 보편적으로 생성되지 않았습니다.

싱.

답변

3

다른 아키텍처의 바이너리를 lipo을 사용하여 단일 범용으로 결합 할 수 있습니다.

+0

감사합니다. 나는 lipo가 있다는 것을 몰랐다, 내가 정말로 필요로하는 것은 모두 lipo라고 생각한다. 아치 플래그를 멈추고 lipo를 사용하여 유니버설 코드를 생성하려면 Makefile을 변경해야합니다. :) –

6

아, 방금이 문제가 발생하여 상당한 시간이 소요되었습니다. 애플 버전의 GCC 4.2.1은 실제로 몇 개의 플래그 (특히 -arch 플래그)를 존중하고 lipo를 사용하여 오브젝트 파일을 다시 뚱뚱한 오브젝트에 집어 넣는 래퍼입니다. 이 드라이버를 약간 수정하여 -arch 플래그를 사용하면서 Macport GCC를 감싸고 다중 아치 오브젝트 파일 (32 비트 및 64 비트 인텔 용)을 생성했습니다.

난 그냥이 작업을 수행하는 방법에 상당히 광범위한 쓰기를 게시 : 작동

http://thecoderslife.blogspot.com/2015/07/building-with-gcc-46-and-xcode-4.html