2009-06-11 6 views
16

Linux에서 프로그램 소스를 다운로드하여 정적으로 연결하려고합니다. 내가복잡한 프로그램을 정적으로 링크하는 방법

./configure 
make 

컴파일이 거대한 메이크, 되세요. prehpes 질문하는 것이 너무 일반적이지만, 바이너리를 정적으로 어떻게 링크시킬 수 있습니까? 감사합니다. .

EDIT :이 이유는 이진 파일이 아무런 종속성이 없거나 최소한 인터넷 연결이없는 Linux 기반 컴퓨터에서도 실행될 수 있도록하기 위함입니다. 업데이트되지 않은 Linux.

+1

정적 연결은 위험한 것으로 간주됩니다! http://people.redhat.com/drepper/no_static_linking.html 죄송합니다. 귀하의 질문에 대한 직접적인 대답은 아니지만 다만 지적하고 싶습니다. –

답변

25

대부분의 autoconf 생성 된 정적 빌드 할 수 있습니다 configure 스크립트 : 문제가 해결되지 않으면

./configure --enable-static 
make 

, 당신은 다음과 같이 LDFLAGS를 통해에서 링커 플래그를 전달 할 수 있습니다 :

./configure LDFLAGS=-static 
+0

아주 좋은 대답, 불행히도 둘 다 어떤 이유로 작동하지 않았다. –

+0

링크 할 정적 라이브러리가 없어서 작동하지 않는다고 생각합니다. –

+2

CentOS에서 정적 링크를 위해 설치해야하는 패키지는 c는'glibc-static'이고, C++ 정적 링크는'libstdC++ - static'입니다. 자세한 내용은 [이 게시물을 참조하십시오] (https://www.systutorials.com/5217/how-to-statically-link-c-and-c-programs-on-linux-with-gcc/) –

5

그래, 링크를 만드는 동안 make 파일을 편집하고 -static 매개 변수를 gcc에 추가해야합니다.

1

gcc를 사용하여 일련의 c 프로그램을 컴파일한다고 가정합니다. 찾으려면 Makefile을 살펴 봐야합니다.

그렇다면 정적 링크를 수행하도록 makefile에서 gcc 줄을 조정할 수 있지만 프로그램의 구조에 따라 복잡한 변경이 될 수 있습니다. 이것이 어떻게 행해지는지 gcc man을 보아라.

왜 정적으로 링크되어 있는지 알고 싶습니다. 대신 prelinking 사용을 고려 했습니까?

모든 구성 요소가 GPL이 아닌 경우 라이센스 작업에 문제가있을 수 있습니다.

2

정적 바이너리를 컴파일 할 수없는 경우 Statifier을 사용하면 좋은 결과를 얻었습니다.

+0

우수 아이디어. 비슷한 제품으로 매우 좋은 결과를 얻었습니다. –

관련 문제