2016-11-11 3 views
2

OS X 용 OpenCV를 사용하여 Xcode에 C++ Unity 플러그인을 만들고 있습니다. 플러그인이 내 Mac에서 컴파일되고 작동하지만 다른 컴퓨터에서 동적 라이브러리 (예 : ffmpeg, libtiff, webp)를/usr/local/opt ... (라이브러리가로드되지 않음 : /usr/local/opt/webp/lib/libwebp.6.dylib 등)C++ 프로젝트 (XCode)의 다른 컴퓨터에서 동적 라이브러리를로드하지 않으려면 어떻게해야합니까?

BREW 설치로 문제가 해결되지만이 플러그인을 다음과 같이 배포해야합니다. "입니다.

질문이 두 개 있습니다. 1) 프로젝트가 다른 컴퓨터에서 동적 라이브러리를 사용하려고 시도하는지 어떻게 알 수 있습니까?

2) 프로젝트를/usr/local/opt가 아닌 번들에서로드하려면 어떻게해야합니까? (나는 정적과 링크를 시도했지만 136 개의 오류가있었습니다 "x86_64 - _OSSpinLockLock, _dispatch_get_global_queue 및 기타 많은 기호에 대한 정의되지 않은 기호)

답변

0

처음 질문에 답변하는 방법을 모르겠습니다. 귀하의 프로젝트가 누구와 링크되어 있는지 알고 계신가요?

두 번째 질문에 대해서는 동적 라이브러리의 '설치 이름'을 설정해야합니다. 해당 라이브러리에 대한 세부 정보와 install_name_tool 명령 줄에 대한 정보를 쉽게 찾을 수 있습니다. 이 경로는 실제로 경로를 저장하는 .dylib 내부에 새겨진 변수입니다. 경로는 바이너리가 해당 경로를 찾을 수있는 위치를 알려줍니다. 배포 가능한 위치에 dylib를 묶으면 설치 이름이 설정되는 경우가 많습니다 ~에 g는 @executable_path/path/relative/to/executable/입니다. 설치 이름은 컴파일러 플래그로 라이브러리를 컴파일 할 때 설정되거나 나중에 dylib 파일에서 install_name_tool을 사용하여 설정할 수 있습니다.

Xcode 빌드 설정의 'Runpath Search Path'옵션도 이에 연결됩니다.

필요한 방향으로 안내해주기를 바랍니다.

+0

첫 번째 질문은 : 저는 프로젝트에서 OpenCV (컴파일 됨)를 사용하고 있음을 압니다. 하지만 OpenCV가 libwebp.6.dylib를로드하려고 시도한다는 것을 어떻게 알 수 있습니까? 번들을 검사하고 이것을 발견 할 수있는 유틸리티가 있습니까? – artbataev

+0

@artbataev 예, OS X에서는 라이브러리 링크를 검사 할 수있는'otool' 명령 행이 있습니다 (여기를보십시오 (http://tech-queries.blogspot.ie/2011/04/dynamic-library) -dependency-on-mac-os-x.html)). –