2013-02-12 3 views
0

나는이처럼 보이는 내 FireBreath 플러그인의 맥 빌드 링크 오류가 점점 오전 :FireBreath 맥 OS X 재단

Undefined symbols for architecture x86_64: 
    "_IOIteratorNext", referenced from: 
     MyFunction(...) in MyFile.o 

날이 링크 오류를 해결하는 데 도움이 바랍니다.

나는 "_IOObjectRelease", "_IORegistryEntryCreateCFProperty", "_IORegistryEntryGetParentEntry", "_IOServiceGetMatchingServices", "_IOServiceMatching", and "_kIOMasterPortDefault"와 비슷한 오류를 가지고 있습니다. 이것은 Frameworks IOKIT 및 COREFOUNDATION을 포함해야한다고 생각합니다.

  1. 을 프로젝트 탐색기에서 프로젝트를 선택 :

    나는이 내가 일시적으로 빌드는 다음과 같이 엑스 코드에 직접 추가하여 성공을 얻을 수 있기 때문에 내가 필요로하는 프레임 워크가 있다는 결론을 내렸다.

  2. 대상을 선택하십시오.
  3. '빌드 단계'탭을 선택하십시오.
  4. '라이브러리와 함께 바이너리 연결'확장기를 엽니 다 ( '빌드 단계 추가'를 사용해야 할 수도 있음).
  5. 각 프레임 워크를 추가하려면 '+'버튼을 한 번 클릭하십시오.

Xcode를 통해 프레임 워크를 추가하면 빌드가 성공합니다. 그러나 prep 스크립트 'prepmac.sh'가 다시 실행되면 프레임 워크가 손실되고 빌드가 실패합니다.

나는 PluginConfig.cmake 및 Mac/projectDef.cmake를 편집하여 FireBreath를 통해 프레임 워크를 추가하는 방법을 시도해 보았으며 CMakeLists.txt를 수정하는 것도 고려해 보았습니다.하지만 이것은 유망하지 않습니다.

나는 두 .cmake 파일 내에서 다양한 조합에 다음 문을 시도했다, 그러나 나는 그들을 넣을 수있는 위치에 대한 확신하지 않다 : 변경의

find_library(IOKIT_FRAMEWORK IOKit) 
message("Finding library IOKit: ${IOKIT_FRAMEWORK}") 

find_library(COREFOUNDATION_FRAMEWORK CoreFoundation) 
message("Finding library CoreFoundation: ${COREFOUNDATION_FRAMEWORK}") 

target_link_libraries(${PROJECT_NAME} 
    ${COREFOUNDATION_FRAMEWORK} 
    ${IOKIT_FRAMEWORK} 
    ${PLUGIN_INTERNAL_DEPS} 
) 

없음 빌드 로그를 변경하려면 보이지 않는다.

Finding library IOKit: /System/Library/Frameworks/Cocoa.framework 
Finding library CoreFoundation: /System/Library/Frameworks/CoreFoundation.framework 

솔루션을 : 솔루션이었다 taxilian 조언을 바탕 물론 나는 새로운 '메시지'문을보고있는 "prepmac.sh"과 변화 사이의 프로젝트를 생성하고 둘 다 Mac/projectDef.cmake에서 올바른 프레임 워크를 올바르게 지정하고 build 디렉토리를 완전히 삭제하고 prepmac.sh 스크립트로 처음부터 다시 작성하십시오.

답변

2

단순히 find_library를 실행하는 것만으로는 충분하지 않습니다. 그것을 target_link_libraries 호출에도 추가해야합니다. 또한 여러분은 자신의 사례가 도서관 자체와 일치하는지 확실히 확인해야합니다. 그게 문제인지 아닌지는 모르겠지만 대소 문자를 구분하는 파일 시스템 (Mac에서는 가능합니다)의 경우에는 좋은 연습입니다. 프레임 워크에 대한

올바른 경우 당신은 firebreath.orgUsing Libraries 페이지가 제대로 따라이 작업을 수행하는 방법에 대한 자세한 정보를 찾을 수 있습니다

"IOKit"와 "CoreFoundation에서"입니다.이런 식으로 뭔가를 시도 :이 곳 은 "add_mac_plugin"전화 후 파일 맥/projectDef.cmake에있을 필요가

find_library(IOKIT_FRAMEWORK IOKit) 
find_library(COREFOUNDATION_FRAMEWORK CoreFoundation) 
target_link_libraries(${PROJECT_NAME} ${COREFOUNDATION_FRAMEWORK} ${IOKIT_FRAMEWORK}) 

참고.

+0

친애하는 택시 기사, 빠른 답변 주셔서 감사합니다! 예, 저는 이미 "get_link_libraries"에 프레임 워크를 추가했지만 "find_library"명령은 "add_mac_plugin"이전이 아니었고 내 기초 이름의 대소 문자가 제안 사항과 일치하지 않았습니다. 그러나 이러한 변화는 도움이되지 못했습니다. 프레임 워크 이름을 추측 했으므로 정확하지 않을 수 있습니다. 더 이상의 아이디어? –

+1

다음과 같은 줄을 추가하십시오 : message ("라이브러리 찾기 IOKit : $ {IOKIT_FRAMEWORK}") - 라이브러리를 찾았는지 여부를 보여줍니다. 그렇지 않다면, – taxilian

+0

prepmac.sh가 그 둘 모두를 찾은 것 같습니다 : 라이브러리 찾기 IOKit : /System/Library/Frameworks/Cocoa.framework 라이브러리 찾기 CoreFoundation :/System/Library/프레임 워크/CoreFoundation.framework. 나는 이것이 내 특별한 Link 오류에 필요한 기반이라고 확신하지 못한다. –