맥북에서 윈도우 게임을 즐기기위해..
게임포팅툴킷을 설치하려고...
sonoma로 맥을 업데이트 했더니.........
빌드가 터졌다
^______________^
더 정확히 말하자면 빌드가 안되는 건 아니고
실행 시점에서 문제가 생긴다.
Library not loaded: @rpath/libglfw.3.dylib
Reason: no LC_RPATH's found
에러로그를 살펴보면 libglfw.3 동적 라이브러리 파일 경로를 못찾는다고 나온다.
보통 dylib 파일은 usr/local/lib에 있는데..
터미널에서 찾아보면
아니 잘 있구만..
컴파일, 링크, 빌드
c, c++과 같은 언어에서는
컴파일을 통해 오브젝트 파일을 만들고
링커를 통해 동적 라이브러리 파일과 링크해서
실제 실행파일을 만든다.
그러니깐 빌드는 잘 되는데
rpath/libglfw.3.dylib 위치를 못찾아서 실행이 안되는 것이다..
상식적으로 그럼 rpath는 usr/local/lib가 되어야하는건데..
에러로그를 보면 rpath라는 것 자체가 없다.
rpath
rpath란 위키피디아의 설명에 따르면
실행 파일이나 라이브러리에 하드코딩 된 런타임 검색 경로라고 정의한다.
그니깐 머.. 동적 라이브러리 파일(dll, dylib)이 있는 경로겠지..
이러한 동적 라이브러리 파일을 찾을때 최우선으로 rpath에 있는 곳을 뒤지는 듯 하다
어쨌든 otool -l 을 통해 로딩된 링크들을 확인해보면..
뭔가 이것저것 많긴한데 쨋든 rpath는 없다
그럼 rpath를 추가해주려면??
https://80000coding.oopy.io/4c67b8c9-53df-4afa-8f4f-9fe0094a4a6e
install_name_tool -add_rpath <new> <file> 을 통해 rpath를 추가해줄 수 있다.
그렇다면...
빌드 후 생성된 파일에 따로 rpath를 추가해준다면??
잘 실행된다! ^_^
그런데 또 문제가 있다면..
솔직히 매번 빌드할때마다 이렇게 터미널켜서 명령어를 일일히 입력해 주기도 쉽지않다..
(귀찮으니깐..)
아니 왜 애초에 갑자기 rpath가 안들어가는지 잘 모르겠긴한데..
쨋든 vscode task에서 빌드할때 특정 명령어를 실행할 수 있다고 한다.
{
"label": "add_rpath",
"type": "shell",
"command": "install_name_tool",
"args": [
"-add_rpath",
"/usr/local/lib",
"${workspaceFolder}/src/main"
],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"reveal": "silent"
},
"problemMatcher": []
}
tasks.json에 이렇게 작성해주고
dependsOn? 인가 이걸 사용해줘서
빌드한 뒤에 이걸 실행시키도록 했다.
{
"label": "Build",
"dependsOrder": "sequence",
"dependsOn" :["cppbuild","add_rpath"],
"group": {
"kind": "build",
"isDefault": true
}
}
이렇게 해주면..
정상적으로 실행된다.
휴~
'컴퓨터 그래픽스 > OpenGL' 카테고리의 다른 글
#5 tinylender 개발일지 : 상태 머신 적용 (0) | 2024.05.12 |
---|---|
#4 gulender 개발일지 : mesh, model 그리고 assimp 세팅 (0) | 2024.05.12 |
#2 gulender 개발일지 : GUI 개발 (0) | 2024.05.01 |
#1 gulender 개발일지 : 기본적인 조작, 버텍스 수정 기능 (2) | 2024.03.31 |
#0 gulender 개발일지 : 개요 (1) | 2024.03.30 |