make install로 설치하는 것과 --prefix 경로에있는 파일들을 cp로 복사하는것과 차이가 있나요??
글쓴이: xoduddk123 / 작성시간: 금, 2014/01/24 - 10:48오전
안녕하세요
프로그램을 크로스컴파일하고있습니다.
그런데 이상하게도 make install을 하면 잘 작동을하는데
--prefix로 다른경로로 설정을 해두고 해당경로에 make install하여서 나온 부속결과물들을 cp로 복사를 하면 정상적으로 작동을 안합니다.
이러한 현상이 신기한데
make install과 --prefix로 make install 경로를 따로 설정해서 나온 부속결과물들을 cp로 복사하는 것들에 대해서 어떠한 차이점이 있나요??
Forums:
우선 make가 하는 동작은 결국 쉘스크립트와
우선 make가 하는 동작은 결국 쉘스크립트와 같습니다. 파일을 복사해야되면 cp를 쓰고, 옮겨야되면 mv를 쓰고 지워야되면 rm을 씁니다. 실제로 파일을 '설치'하는 경우에는 install이라는 명령어를 쓰는게 보통이지만, 아무튼 쉘에서 직접 cp를 호출하는 것과, make를 통해서 호출하는 것에 차이는 없습니다.
파일을 복사했을 때 실행이 안된다면 프로그램 자체에 경로 의존적인 부분이 있고, 그게 --prefix 옵션에 의존해서 결정된다는 뜻이겠죠.
LD_LIBRARY_PATH
라이브러리를 찾을 수 없기 때문이죠.
1. 링크시 rpath옵션
2. LD_LIBRARY_PATH 환경변수 세팅
!23456---1----+----2----+----3----+----4----+----5----+----6----+----7-2--+----8
"배웠다"는 "할 수 있다"의 동의어가 아니다.
make install이 단순한 복사만 한다면 상관이
make install이 단순한 복사만 한다면 상관이 없는데
웬간한 프로그램들은 make install 할 때 복사뿐만 아니라 경로에 맞게 설정파일을 편집하는 스크립트나 자동설정 프로그램들(설치시에만 작동하고 설치되지 않는 것도 있을 수 있음)을 같이 실행시킵니다.
cp만으로 안된다면 make install 시 실행되는 부분들을 분석해서 뭘 하는지 파악해야 합니다.
Written By the Black Knight of Destruction
configure 의 --prefix 옵션에 주어지는
configure 의 --prefix 옵션에 주어지는 path 는 default path 의 일부로 소스와 같이 컴파일되는 경우가 흔합니다.
예를 들어 /etc/xxx.cfg 가 아니라 /my/prefix/path/etc/xxx.cfg 를 기본 참조하도록 프로그램이 바뀐다는 겁니다.
install path 만 변경하고 싶다면 configure 의 --prefix 에선 install path 전체를 빼시고,
make DESTDIR=/my/prefix/path install
로 "설치" 하시면되는데, autoconf/automake 를 사용해서 작성된 프로젝트일 경우에만 가능합니다.
위에 설명한 방식대로 하실 경우에 한가지 신경쓰실 문제가 있습니다.
라이브러리들의 경우에 .pc 파일에 pkgconfig 가 사용할 path 가 기록되어 설치되는데,
.pc 파일에 기록된 path 에는 DESTDIR 이 포함되지 않기 때문에
이 라이브러리를 참조하는 다른 것을 크로스 컴파일 해야 할 경우에
pkgconfig 가 어떤 경로의 .pc 파일을 참조하고,
참조한 pc 파일 내의 path 정보가 어떻게 되는지 주의깊게 살펴서 수정할 것은 직접 수작업으로 pc 파일을 수정하셔야 하는데요,
여기까지는 당연한 얘긴데...
라이브러리들 중에는 .pc 파일 뿐만 아니라 xxx-config 같은 전용 스크립트를 제공하는 놈이 종종있고,
이 라이브러리를 이용하는 프로젝트의 configure 에서 pkgconfig 가 아니라 저런 전용 스크립트를 사용해서 cflag, lib 경로 따위를 가져오는 경우가 흔합니다.
그러니... 혹시 이런 스크립트를 제공/사용하는 경우가 있다면 같이 수정해야 합니다.
xxx-config 의 예를 보시려면... 사용하시는 desktop linux 에서 ls /usr/bin/*-config 해보시면 아마도 몇 개 나올겁니다.
제 경우엔
댓글 달기