사이먼! 나는 당신이 어떻게 느끼는지 알고있다; 나는 리눅스를 배우는이 부분에도 어려움을 겪었다. 내 자신의 경험을 바탕으로, 나는 당신이 다루는 몇 가지 항목 (주로 나 자신을위한 참고 자료!)에 대한 자습서를 썼습니다 : http://easyaspy.blogspot.com/2008/12/buildinginstalling-application-from.html . 간단한 Python 응용 프로그램을 빌드 / 설치하는 방법에 대한 내 의견에 감사드립니다. :)
이것이 도움이되기를 바랍니다! 그리고 행복한 컴파일.
팀 존스
Ubuntu Linux에서 소스에서 애플리케이션 빌드 / 설치
우분투 리포지토리는 훌륭한 응용 프로그램으로 가득 차 있지만 리포지토리에 없거나 (데비안 패키지가없는) "필수 도구"를 만나야합니다. 리포지토리보다 최신 버전입니다. 너 뭐하니? 음, 소스에서 애플리케이션을 빌드해야합니다! 걱정하지 마십시오. 소리처럼 복잡하지는 않습니다. 랭크 아마추어가 된 경험을 바탕으로 한 몇 가지 팁이 있습니다! (이 예제에서 Ubuntu를 사용하는 동안 일반적인 개념은 Fedora와 같은 대부분의 Unix / Linux 배포판 및 Windows의 Cygwin 플랫폼에도 적용 할 수 있어야합니다.)
소스에서 대부분의 응용 프로그램을 빌드 (컴파일)하는 기본 프로세스는 configure-> compile-> install 순서를 따릅니다. 이러한 작업을 수행하는 일반적인 Unix / Linux 명령은 config
-> make
-> make install
입니다. 경우에 따라 모든 명령을 단일 명령으로 결합 할 수 있음을 보여주는 웹 페이지를 찾을 수도 있습니다.
$ config && make && make install
물론이 명령은 이러한 단계 중 아무 문제가 없다고 가정합니다. 여기가 재미가 온다!
시작하기
이전에 시스템의 소스에서 응용 프로그램을 컴파일하지 않은 경우 gcc
컴파일러 스위트 와 같은 일반적인 개발 도구 , 일부 공통 헤더 파일 (이미 작성된 코드로 생각 하십시오)을 사용하여 응용 프로그램을 설정해야합니다 설치중인 프로그램에서 사용하는 다른 사람 및 make 도구) 다행히 우분투에는 build-essential
이것을 설치할 메타 패키지 가 있습니다. 설치하려면 (또는 이미 가지고 있는지 확인하십시오!) 터미널에서 다음 명령을 실행하십시오.
$ sudo apt-get install build-essential
기본 설정이 완료되었으므로 응용 프로그램 소스 파일을 다운로드하여 "홈"디렉토리와 같은 읽기 / 쓰기 권한이있는 디렉토리에 저장하십시오. 일반적으로 파일 확장자는 .tar.gz
또는 로 아카이브 파일에 있습니다 .tar.bz2
. 는 .tar
단순히 상대 디렉토리 구조를 보존 파일의 그룹 인 "테이프 아카이브"의 것을 의미한다. .gz
널리 사용되는 Unix / Linux 압축 형식 인 gzip (GNU zip) 의 약자입니다. 마찬가지로 .bz2
bzip2 의 약어로 gzip보다 더 높은 압축 (작은 압축 파일 크기)을 제공하는 새로운 압축 형식입니다.
소스 파일을 다운로드 한 후 터미널 창 (Ubuntu 메뉴의 시스템 터미널)을 열고 파일을 저장 한 디렉토리로 변경하십시오. ( ~/download
이 예제에서 사용하겠습니다 . 여기에서 '~'는 "home"디렉토리의 바로 가기입니다.) tar 명령을 사용하여 다운로드 한 아카이브 파일에서 파일을 추출하십시오.
파일이 gzip 아카이브 인 경우 (예 :로 끝남 .tar.gz
) 다음 명령을 사용하십시오.
$ tar -zxvf filename.tar.gz
파일이 bzip2 아카이브 인 경우 (예 :로 끝남 .tar.bz2
) 다음 명령을 사용하십시오.
$ tar -jxvf filename.tar.gz
팁 : 아카이브를 추출하기 위해 모든 명령 행 스위치를 기억하지 않으려면 dtrx (내가 좋아하는 것!) 또는 deco (더 인기있는) 유틸리티 중 하나 (또는 둘 다)를 사용하는 것이 좋습니다. 이 유틸리티 중 하나를 사용하면 유틸리티 이름 (dtrx 또는 deco)과 파일 이름 만 입력하면 나머지는 모두 수행됩니다. 이 두 가지 모두 실행 가능한 대부분의 아카이브 형식을 처리하는 방법을 "알고"큰 오류 처리 기능을 가지고 있습니다.
소스에서 빌드 할 때 발생할 수있는 두 가지 일반적인 유형의 오류가 있습니다.
- 구성 스크립트 (일반적으로 config 또는 configure)를 실행하여 설정과 관련된 make 파일을 만들 때 구성 오류가 발생합니다.
- make 파일이 생성 된 후 make 명령을 실행할 때 컴파일러 오류가 발생하고 컴파일러가 필요한 일부 코드를 찾을 수 없습니다.
이들 각각을 살펴보고이를 해결하는 방법에 대해 논의 할 것입니다.
구성 및 구성 오류
소스 코드 아카이브 파일을 추출한 후 터미널에서 추출 된 파일이 포함 된 디렉토리로 변경해야합니다. 일반적으로이 디렉토리 이름은 파일 이름과 동일 .tar.gz
하거나 .tar.bz2
확장자가 없습니다 . 그러나 때때로 디렉토리 이름은 버전 정보가없는 응용 프로그램의 이름 일뿐입니다.
소스 디렉토리에서 README
파일 및 / 또는 INSTALL
파일 (또는 유사한 이름을 가진 것)을 찾으십시오 . 이러한 파일에는 일반적으로 종속성에 대한 정보를 포함하여 응용 프로그램을 빌드 / 컴파일하고 설치하는 방법에 대한 유용한 정보가 포함되어 있습니다. "종속성"은 성공적으로 컴파일하는 데 필요한 다른 구성 요소 나 라이브러리의 이름입니다.
당신이 읽은 후 README
및 / 또는 INSTALL
파일을 (그리고, 희망 응용 프로그램에 대한 모든 관련 온라인 문서 보았다), 파일 이름 (파일에 설정된 "X"권한이) 실행 파일을 찾아 config
나 configure
. 때때로 파일의 확장자는 .sh
(예 :) 일 수 config.sh
있습니다. 일반적으로 컴파일을위한 "정상적인"환경이 있는지 확인하기 위해 다른 유틸리티를 실행하는 쉘 스크립트입니다. 즉, 필요한 모든 것이 설치되어 있는지 확인합니다.
팁 : 이것이 구성 파일 대신 Python 기반 응용 프로그램 인 경우이라는 파일을 찾아야합니다 setup.py
. 파이썬 응용 프로그램은 일반적으로 설치가 매우 간단합니다. 이 응용 프로그램을 루트로 설치하려면 (예 : Ubuntu에서 다음 명령 앞에 sudo를 입력)이 명령을 실행하십시오.
$ python setup.py install
그게 당신이해야 할 모든 것입니다. 이 자습서의 나머지 부분을 건너 뛰고 응용 프로그램 사용 및 즐기기로 직접 진행할 수 있습니다.
터미널에서 구성 스크립트를 실행하십시오. 일반적으로 일반 사용자 계정으로 구성 스크립트를 실행할 수 있습니다.
$ ./config
스크립트는 일부 메시지를 표시하여 스크립트가 수행중인 작업에 대한 아이디어를 제공합니다. 스크립트는 성공 여부를 표시하고 실패한 경우 실패 원인에 대한 정보를 제공합니다. 오류 메시지가 표시되지 않으면 일반적으로 모든 것이 제대로되었다고 가정 할 수 있습니다.
구성 스크립트처럼 보이는 스크립트를 찾지 못하면 일반적으로 응용 프로그램이 매우 단순하고 플랫폼에 독립적이라는 것을 의미합니다. 제공된 Makefile
시스템은 모든 시스템에서 작동 하므로 아래의 빌드 / 컴파일 단계로 건너 뛸 수 있습니다 .
예
이 학습서에서는 애플리케이션 빌드시 발생할 수있는 오류 유형의 예로 Newsbeuter라는 텍스트 기반 RSS 리더를 사용합니다. Newsbeuter의 경우 구성 스크립트 이름은입니다 config.sh
. 내 시스템에서을 실행할 때 config.sh
다음 오류가 발생합니다.
tester@sitlabcpu22:~/download/newsbeuter-1.3$ ./config.sh
Checking for package sqlite3... not found
You need package sqlite3 in order to compile this program.
Please make sure it is installed.
약간의 연구를 한 결과, 실제로 sqlite3
응용 프로그램이 설치되어 있음을 알았습니다 . 그러나 소스에서 빌드하려고하므로 config.sh
실제로 찾고있는 것은에 대한 개발 라이브러리 (헤더)입니다 sqlite3
. 우분투에서 대부분의 패키지에는로 끝나는 관련 개발 대응 패키지가 -dev
있습니다. Fedora와 같은 다른 플랫폼은 종종 -devel
개발 패키지 의 패키지 접미사를 사용 합니다.
sqlite3
개발 패키지에 적합한 패키지를 찾으려면 apt-cache
Ubuntu 의 유틸리티 (및 마찬가지로 yum
Fedora 의 유틸리티)를 사용할 수 있습니다.
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-cache search sqlite
이 명령은 상당히 큰 결과 목록을 반환하므로 적절한 패키지를 결정하기 위해 약간의 탐정 작업을 수행해야합니다. 이 경우 적절한 패키지는 libsqlite3-dev
입니다. 때로는 우리가 찾고있는 패키지 lib
에 동일한 패키지 이름 plus 대신 접두사가 붙습니다 -dev
. 때로는 여러 응용 프로그램에서 사용할 수있는 공유 라이브러리를 찾고 있기 때문입니다. 설치하려면 libsqlite3-dev
터미널에서 일반적인 apt-get install 명령을 실행하십시오.
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-get install libsqlite3-dev
이제이 config.sh
종속성 문제를 해결하고 더 이상 종속성 문제가 없는지 확인하기 위해 다시 실행 해야합니다. (여기에 표시하지 않지만 Newsbeuter의 경우 libcurl4-openssl-dev
패키지 도 설치해야했습니다 .) 또한 개발 패키지 (예 :)를 설치 libsqlite3-dev
하고 관련 응용 프로그램 패키지 (예 :)는 설치 sqlite3
하지 않은 경우 이미 설치되어 있으면 대부분의 시스템은 관련 응용 프로그램 패키지를 자동으로 동시에 설치합니다.
구성이 성공적으로 실행되면 하나 이상의 make 파일이 작성됩니다. 이러한 파일은 일반적으로 이름이 지정됩니다 Makefile
(파일 이름 대소 문자는 Unix / Linux에서 중요합니다!). 빌드 패키지 src
에 등의 하위 디렉토리가 포함 된 Makefile
경우 각 하위 디렉토리 에도.
빌드 및 컴파일 오류
이제 애플리케이션을 실제로 컴파일 할 준비가되었습니다. 이것을 종종 건물이라고하며 이름은 실제 구성 과정에서 차용됩니다. 일반적으로 여러 소스 코드 파일 인 응용 프로그램의 다양한 "피스"가 결합되어 전체 응용 프로그램을 구성합니다. make 유틸리티는 빌드 프로세스를 관리하고 실제로 작업을 수행하기 위해 컴파일러 및 링커와 같은 다른 응용 프로그램을 호출합니다. 대부분의 경우 구성을 실행 한 디렉토리에서 make (일반 사용자 계정으로)를 실행하기 만하면됩니다. (Qt 라이브러리로 작성된 응용 프로그램 컴파일과 같은 일부 경우에는 qmake와 같은 다른 "래퍼"응용 프로그램을 대신 실행해야합니다. 자세한 내용 은 항상 README
및 / 또는 INSTALL
문서를 확인하십시오.)
위의 구성 스크립트와 마찬가지로 터미널에서 make (또는 유사한 유틸리티)를 실행하면 실행중인 내용과 경고 및 오류에 대한 일부 메시지가 표시됩니다. 일반적으로 경고는 주로 응용 프로그램 개발자를위한 것이며 위반되는 표준 사례가 있다는 경고를 무시할 수 있습니다. 일반적으로 이러한 경고는 응용 프로그램 기능에 영향을 미치지 않습니다. 반면에 컴파일러 오류를 처리해야합니다. Newsbeuter를 사용하여 make를 실행했을 때 한동안 문제가 없었지만 오류가 발생했습니다.
tester@sitlabcpu22:~/download/newsbeuter-1.3$ make
...
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/configparser.o -c src/configparser.cpp
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/colormanager.o -c src/colormanager.cpp
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:5:18: error: stfl.h: No such file or directory
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:33: error: ISO C++ forbids declaration of \u2018stfl_form\u2019 with no type
./include/stflpp.h:33: error: expected \u2018;\u2019 before \u2018*\u2019 token
./include/stflpp.h:34: error: ISO C++ forbids declaration of \u2018stfl_ipool\u2019 with no type
./include/stflpp.h:34: error: expected \u2018;\u2019 before \u2018*\u2019 token
make: *** [src/colormanager.o] Error 1
첫 번째 오류가 발생하자마자 make 프로세스가 중지됩니다. 컴파일러 오류 처리는 때로는 까다로울 수 있습니다. 문제에 대한 단서의 오류를 살펴 봐야합니다. 일반적으로 문제는 확장명이 보통 .h
또는 .hpp
인 일부 헤더 파일 이 누락 된 것입니다. 위의 오류가 발생하면 stfl.h
헤더 파일을 찾을 수 없다는 문제가 분명합니다 . 이 예에서 볼 수 있듯이 오류 메시지의 첫 번째 줄을보고 문제의 근본 원인을 찾기 위해 노력하고 싶습니다.
Newsbeuter 문서를 살펴본 후 (시작하기 전에 수행해야했지만 튜토리얼 의이 부분은별로 의미가 없습니다!) STFL이라는 타사 라이브러리가 필요하다는 것을 알았습니다. 이 경우 어떻게해야합니까? 글쎄, 우리는 본질적으로 필요한 라이브러리에 대해 정확히 동일한 프로세스를 반복합니다. 라이브러리를 얻고 라이브러리에 대해 configure-build-install 프로세스를 실행 한 다음 원하는 응용 프로그램 빌드를 다시 시작하십시오. 예를 들어 STFL의 경우 libncursesw5-dev
제대로 빌드하려면 패키지 를 설치해야했습니다 . (보통, 다른 필수 응용 프로그램을 설치 한 후 원래 응용 프로그램에서 구성 단계를 다시 실행할 필요는 없지만 결코 아프지 않습니다.)
STFL 툴킷을 성공적으로 설치 한 후 Newsbeuter의 작성 프로세스가 성공적으로 실행되었습니다. make 프로세스는 일반적으로 오류가 발생한 지점에서 벗어납니다. 따라서 이미 성공적으로 컴파일 된 파일은 다시 컴파일되지 않습니다. 모든 것을 다시 컴파일하려면 make clean all을 실행하여 컴파일 된 객체를 제거한 다음 make를 다시 실행할 수 있습니다.
설치
빌드 프로세스가 완료되면 응용 프로그램을 설치할 수 있습니다. 대부분의 경우 파일 시스템의 공통 영역 (예 : /usr/bin
또는 /usr/share/bin
등)에 응용 프로그램을 설치하려면 루트로 설치를 실행해야합니다. 설치는 전체 프로세스에서 가장 간단한 단계입니다. 설치하려면 터미널에서 다음을 실행하십시오.
$ make install
이 프로세스의 출력에서 오류가 있는지 확인하십시오. 모든 것이 성공하면 터미널에서 명령 이름을 실행할 수 있어야합니다. (GUI 응용 프로그램이거나 응용 프로그램 실행이 끝날 때까지 터미널 세션을 사용할 수없는 경우 명령 줄의 끝에 & 끝에 추가하십시오.)
소스에서 응용 프로그램을 빌드 할 때 일반적으로 Ubuntu의 GUI 메뉴에 아이콘이나 바로 가기를 추가하지 않습니다. 이것을 수동으로 추가해야합니다.
그리고 그것은 기본적으로 우분투의 소스에서 응용 프로그램을 빌드하고 설치하는 잠재적 인 반복적이지만 프로세스입니다. 이 작업을 몇 번만 수행하면 두 번째 자연이됩니다!