옵션 A) 변경 lib 디렉토리 경로
옵션 B) [유엔]/당신의 앱이 dylib
에 RPATH
을 할 수있는 잘못된 경로를 사용
또 다른 이유 RPATH
을 설정합니다. otool -l <full-path-of-your-app>
을 사용하여 귀하의 dylib에서 RPATH
을 확인할 수 있습니다. RPATH는 위치 바이너리가 라이브러리를 처음 픽업 할 것임을 알려주며, 애플리케이션에 설정되어있는 경우 QT 작성자가 설정 한 RPATH
을 해제 할 수 있습니다.
man page of dyld을 확인하여 RPATH
의 작동 방식을 확인하십시오.
예를 들어 RPATH
이 Xcode 앱에 설정되어 있는지 확인하십시오 (귀하는 dylib 섹션에서 LC_RPATH
필드를 찾고 있습니다). 해제 RPATH
사용하려면
$ otool -l /Applications/Xcode.app/Contents/MacOS/Xcode
Load command 22
cmd LC_RPATH
cmdsize 48
path @executable_path/../Frameworks (offset 12)
Load command 23
cmd LC_RPATH
cmdsize 56
path @executable_path/../SharedFrameworks (offset 12)
Load command 24
cmd LC_RPATH
cmdsize 40
path @executable_path/../PlugIns (offset 12)
install_name_tool -delete_rpath <RPATH-from-otool-l-output>
QT 제작자는 일반적으로이 일반적으로 존재하지 않는 그 패키지 및 대상 시스템에 제공 라이브러리를 사용합니다. 더 나은 할 일은 curl
을 컴파일하고 응용 프로그램과 함께 제공합니다.
실제로 Qt 작성자가 검사 한 응용 프로그램이 실행될 때 응용 프로그램 아이콘을 클릭하여 실행 중이었기 때문에 실제로 이러한 방식으로 작동하지 않는 이유를 알 수 없습니다. 그러나 otool과 install_name_tool을 가리키면 도움이되었습니다. 따라서 전달할 수있는 앱에 컬을 해킹 할 수있었습니다. 정적으로 건물을 만들면 컬과 그 의존성을 정적으로 만들어야하기 때문에 효과가 없습니다. – Mateusz
@Mateusz 귀하의 사례로 의심되는 답변을 업데이트했습니다. – PnotNP