2011-03-22 2 views
0

Mac OS X에서 makefile을 사용하여 g ++로 제대로 컴파일되는 코드가 있지만 Xcode로 성공적으로 빌드 할 수 없습니다. 여기 링크 타임에 기존 방법을 Xcode로 대체하는 방법은 무엇입니까? libtool 대신 'ar -r'을 사용합니까?

프로젝트 설정의 간단한 개요를, 다음의 경우가 있습니다

  1. libA.a이

    • 는 FUNC()
    • 우리를 구현 myclass_stub.cpp을 포함 makefiles는 'ar -r'을 사용하여 라이브러리를 패키지화합니다. 그러면 기존 메소드를 대체 할 수 있습니다.
    • 엑스 코드는
  2. 은 Program.exe 뿐만 아니라 FUNC()를 구현 인 MyClass.cpp를 포함 패키징에서 libtool을 사용합니다. 내가 libA.a를 구축하고 엑스 코드와은 Program.exe한다면 및 링크는 정적 g ++

를 사용 libA.a, 그것은에 대해 "중복 기호"불만 링크시 myclass_stub.o 및 myclass.o에서 FUNC .

또한 Xcode를 사용하여 program.exe를 컴파일하고 'ar -r'과 함께 패키지 된 libA.a와 연결하려고 시도했지만 여전히 중복 심볼에 대해 불만을 표시합니다.

중복 구현이 이상적이지는 않지만 지금은 그 문제를 해결할 수 없습니다. 표준 'ar'과 'g ++'을 사용하여 메이크 파일로 빌드 할 코드를 얻을 수 있다면, Xcode에서 설정해야 할 옵션이 무엇인지 알고 싶습니다. 이제

, 내 질문 :

  1. 내가 대신 엑스 코드의 라이브러리를 패키지로 'AR -r'를 사용하고 싶습니다. 가능한가? 그렇다면 어떻게? 기존 심볼을 강제로 대체 할 수있는 libtool과 비슷한 옵션이 있습니까?

  2. libtool과 'ar -r'의 차이점은 Xcode로 빌드하는 것과 메이크 파일을 만들 때의 주된 차이가 아닐 수도 있습니다. 나는 동일한 컴파일러 플래그를 가지고 있지만 입력/오브젝트 파일 목록은 대체로 다른 순서로있을 가능성이 높습니다. 이 링크 오류에 대한 다른 가능한 해결책이 있습니까?

나는 libtool vs ar for creating a static library (xcode linker) @ 질문에 관련보고 있지만 솔루션 그런데

, 나는 모든 부하 및 --force 부하를 추가했지만, 그들은 있지 않은 것 같습니다 내가 x86_64 용으로 만들려고 노력하고 있기 때문에 많은 일을해야합니다.

답변

0

저는 xcode에 대해 아무것도 모릅니다. gcode에서 대체해야 할 기호에 약한 기호 (g ++ : 속성 (약)) 사용에 대해 생각해 보셨습니까?