dylib를 실행 파일에 직접 넣을 수는 없습니다. (이것은 번들이 무엇을 위해 만들어 졌는지는 알 수 있지만 명령 행 도구로는 도움이되지 않습니다.)
각 dylib는 정적 (.a) 라이브러리로 재구성 할 수 있습니다.이 경우 모든 실행 가능한 코드 니즈가 실행 파일에 복사 될 것이고, 당신은 그것으로 무엇이든 배포 할 필요가 없다. 라이브러리에 소스가있는 경우 일반적으로 매우 쉽습니다.하지만 빌드 방법을 정확히 알지 못하면 무엇을 변경해야하는지 알려주지 못합니다.
정적 연결에서 유의할 사항 중 하나는 서로 다른 라이선스가 함께 재생되는 방식에 영향을 미친다는 점입니다. 특히, 사용중인 라이브러리 중 LGPL 라이센스가있는 경우 정적 연결은 동적 연결에 영향을 미치지 않습니다. 자세한 내용은 this question (및 해당 답변의 링크)을 참조하십시오. 실제로 라이센스에 대한 법률 자문을 위해 스택 오버플로 (Stack Overflow)에 대한 대답을 신뢰해서는 안됩니다. 어쨌든, 그건 아마도 OP의 "나는 프로그램을 만들어서 그것을 내 친구에게주고 싶다"는 문제는 아니지만, 나중에이 질문을 읽는 다른 사람들을 위해서일지도 모른다.
정적 연결이 가능하지 않거나 바람직하지 않은 경우 실행 파일과 dylib을 패키지로 묶어 친구의 컴퓨터에 가져 오기 만하면됩니다. 그는 분명히 설치 프로그램을 실행하고 싶지 않으므로 tarball 또는 zipfile을 의미합니다.
유일한 까다로운 부분은 exe가 dylib를 찾을 위치를 알고 있는지 확인하는 것입니다. 각 dylib가 dyld 검색 경로에 있지 않는 한 (자세한 내용은 dyld에 대한 맨 페이지를 참조하십시오. 그러나 아무것도 설치하지 않으려는 경우에는 도움이되지 않습니다) 또는 정확히 동일한 위치에 있습니다. 실행 파일을 실행하면 dyld의 "image not found"오류가 발생하여 실패합니다.
"똑같은 장소"는 "/ executable/path/libfoo.dylib"와 같은 절대 경로가 아니라 "myex와 동일한 디렉토리에 있음"을 의미 할 수 있습니다. /libfoo.dylib "또는"../../foo/build/Release/libfoo.dylib "와 같은 상대 경로를 사용하십시오.(일반 상대 경로는 현재 작업 디렉토리가 아닌 실행 파일 또는 번들 디렉토리를 기준으로합니다.) 당신은 myexe이 수행하여보고된다
을 볼 수에 찾고 아니에요
otool -L myexe
아무것도 @ executable_path은 (물건을 제외하고/lib 디렉토리와 OS의 일부이며 배포 할 필요가 없습니다은/usr/lib 디렉토리에), 당신은 다음과 같이 해결할 수 :
install_name_tool -change ../../../mydl/build/Release/libmydl.dylib @executable_path/libmydl.dylib myexe
를 이제, 당신은 그냥 모두 복사해야 myyles 바로 옆에있는 그 dylib을 타르다가 친구에게줍니다. 그는 단지 그것을 untar 수 있으며 exe를 실행합니다.
abarnert의 답변을 받아 들일 수 있습니까? 그것은 다른 사람들이 그것을 찾는데 도움이 될 것입니다. 그것은 나를 위해 매우 도움이되었습니다. – Yitz
완료. 지연에 대해 유감스럽게 생각합니다. – Olie