macOS에서 cgo를 사용하고 상대 dylib 경로를 지정하는 것은 일반적인 문제입니다. cgo는 Go 언어가 C 언어와 상호 작용하는 데 사용하는 도구인 반면, dylib는 macOS의 동적 링크 라이브러리입니다. 상대 경로를 지정하면 프로젝트가 더욱 유연해지고 이식 가능해집니다. 그렇다면 macOS의 cgo에서 상대 dylib 경로를 어떻게 지정해야 할까요? PHP 에디터 스트로베리가 자세히 답변해드리겠습니다.
현재 C로 작성된 기존 dylib를 go in으로 만들려고 합니다. 이를 위해 cgo를 사용하고 모든 것이 올바르게 컴파일됩니다. go 빌드가 생성된 실행 파일 dyld 를 실행하려고 하면 go 소스 디렉터리에 있는 dylib를 찾을 수 없습니다.
나는 이 cflags와 ldflags를 성공적으로 사용하고 있습니다:
으아악또한 매직 문자열 @executable_path
을 사용하여 상대 라이브러리 검색 경로를 지정할 수 있지만 이를 -l에 추가하거나 링커 플래그에 -install_name을 추가하려고 하면 결과가 나오지 않는다는 것도 배웠습니다.
제가 받은 링커 오류 메시지는 다음과 같습니다.
으아악go 외부에서 빌드 단계를 추가하지 않는 동안, 나중에 바이너리가 있을 동일한 폴더에 있는 dylib를 사용하여 go 빌드로 실행할 수 있도록 cgo를 올바르게 구성하려면 어떻게 해야 합니까?
알고 보니 목표에 매우 가까웠는데 실제 라이브러리에 저장된 검색 경로가 잘못되었습니다.
내 질문에 있는 코드는 다음과 같이 라이브러리를 수정한 후 제대로 작동합니다.
으아악goland가 go 빌드를 제어하여 내 라이브러리를 실행 중인 애플리케이션의 출력 디렉터리에 복사하도록 하는 깔끔한 방법을 찾지 못했지만, 출력 디렉터리를 절대 경로로 설정하고 Pre를 추가하여 잠정적으로 종속성을 출력에 복사했습니다. -폴더에 대한 실행 명령.
위 내용은 macOS의 cgo에서 상대 dylib 경로를 지정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!