2014-02-10 3 views
1

libsndfile을 사용하여 오디오 파일에서 일부 데이터를 추출하는 C 프로그램을 만들었습니다.라이브러리를 사용하는 C 프로그램 컴파일

가능한 한 설치 프로그램을 루트 권한없이 설치하는 것이 가능한가요?

Libsndfile을 대상 컴퓨터에서 사용할 수 없으므로 어떻게 든 내 프로그램과 함께 패키지해야합니다. 라이브러리를 정적으로 링크하는 방법이 있습니까? Autotools 자습서도 살펴 봤지만 진행 방법을 잘 모르겠습니다.

내가 패키지 관리자를 사용하여 라이브러리 설치 내 dev에 기계에 차질없이 컴파일 할 수 apt-get install libsnfile1-dev

makefile은 매우 간단합니다 :

CFLAGS=-std=c99 -Wall -pedantic -g 
CLIBS= -lsndfile -lm 
BIN=audiodecode 
CC=gcc 

MAIN=main.o 

FILES= 

OBJS=$(FILES) $(MAIN) 

.PHONY: all 
all: clean $(OBJS) 
    $(CC) $(CFLAGS) -o $(BIN) $(OBJS) $(CLIBS) 

.PHONY: clean 
clean: 
    rm -f *.o $(BIN) 
+0

당신은 말하지 않았다 - 나는 당신이 리눅스에 있다고 생각하니? 어쨌든, 관련 바로 아래의 답변은 찾고있는 것 같습니다. 예 : http://stackoverflow.com/questions/16027854/gcc-static-library-linking-vs-dynamic-linking 또는 https://stackoverflow.com/questions/3181154/linking-gsl-or-other-library-statically-into-a-shared-library – keshlam

+0

간단히 말해서 공유 라이브러리를 배포하지 않으려면 모든 기능 공유 라이브러리에서 사용하는 호출은 로컬로 (즉, 실행 파일에서) 작성 및 정의되어야합니다. – ryyker

답변

0

패키지의 많은 의존성을 번들 . 예 : rsync (번들 libpopt 포함), gnupg (번들 libz 포함). 일반적으로 번들되는 다른 종속성은 gettext 또는 glib입니다. 영감을 얻으려면 이러한 인기있는 오픈 소스 프로젝트가 어떻게 작동하는지보십시오.

http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.25.tar.gz의 내용을 하위 디렉토리에두고 하위 규칙을 먼저 작성하기위한 적절한 규칙을 추가하십시오.

테스트되지 않은 샘플 코드 : OBJS + = libsndfile/보너스 포인트

libsndfile/libsndfile.a: 
     cd libsdndfile && ./configure --enable-static && $(MAKE) 

가 구성 스크립트를 추가 libsndfile.a, 시스템에 이미 동적으로 libsndfile 링크를 설치 한 경우 있는지 확인하십시오.

관련 문제