2013-03-09 7 views
1

PortAudio 인터페이스를 사용하는 Debian GNU/Linux에서 C 응용 프로그램을 만들려고합니다.ALSA를 사용하여 컴파일 할 수 없음

lib32asound2: /usr/lib32/libasound.so.2 
lib32asound2: /usr/lib32/libasound.so.2.0.0 
lib32asound2-dev: /usr/lib32/libasound.so 
libasound2: /usr/lib/x86_64-linux-gnu/libasound.so.2 
libasound2: /usr/lib/x86_64-linux-gnu/libasound.so.2.0.0 
libasound2-dev: /usr/lib/x86_64-linux-gnu/libasound.so 

는 그래서 libasound이어야 이렇게하려면 내가 libasound2-dev를 설치이를 위해이 docs.

에서 gcc -lrt -lasound -ljack -lpthread -o YOUR_BINARY main.c libportaudio.a 내 프로그램을 컴파일해야하며, 파일 apt-file search libasound.so를 사용하고 어디 점검, 이것은 출력 올바르게 설치,하지만이 메이크 내 프로그램을 컴파일 할 때 :

DMXTest: main.c libdmx.a 
    gcc -static -Wall main.c -L. -ldmx -lusb -lrt -lasound -ljack -lfftw3 -g -o main libportaudio.a 

을 나는 다음과 같은 오류가 발생합니다 : /usr/bin/ld: cannot find -lasound합니다.

어떻게이 라이브러리를 올바르게 연결할 수 있습니까?

+0

32 비트 및 64 비트 libs가 있습니다. 시스템 및 gcc 기본값은 무엇입니까? –

+0

내 시스템 기본값은 mulitarch :'3.2.0-4-amd64'와 함께 64 비트이고 gcc는'Target : x86_64-linux-gnu'와 함께'gcc version 4.7.2 (Debian 4.7.2-5)'입니다. . – tversteeg

+1

'-static'에'libasound.a'가 없습니다 ... 정적 바이너리를 연결할 수 없습니다. –

답변

3

당신은 -static에 대한 libasound.a이없는, 당신은해야합니다, 또는 당신은 거의 확실 단지 (LDFLAGS 또는 CFLAGS의 가능성)을 Makefile에서 -static을 제거 할 수 있습니다.

관련 데비안 버그 522544 및 관련 우분투 버그 #993959가 있습니다.

당신은 그것은 또한 당신이 정적을 빌드 할 때이에 ./configure --enable-static 지원 비록 그것이 일부 기능을 제거 할 수 있습니다 의심 (특히 libpthread.so, librt.solibdl.so)를 다른 라이브러리를 사용하기 때문에하지만, 소스에서 자신의 libasound을 구축 할 수 있습니다 빌드 시간은 (또는 시도하십시오 --enable-shared=no --enable-static=yes).

FWIW, 정적 바이너리의 사용, glibc는 메인테이너가 "discouraged"입니다 내가 동의하지 않는하지만 ... 난 다음 명령을 사용

+0

하지만 정적 라이브러리'libdmx.a '를 만들었습니다. 어떻게 '정적'줄을 지울 때 그 라이브러리를 사용할 수 있습니까? – tversteeg

+1

'-static'은 최종 결과를 제어하고, "dynamic"은'.a' 파일의 사용을 막지 않으며, 단지'.o' 파일의 라이브러리입니다. 그래서 보통 동적 인 실행 파일에서'libdmx.a'를 사용할 수 있습니다 (반대는 사실이 아닙니다, 일반적으로). 그렇지 않으면'-shared'로 라이브러리를 다시 만들 수 있습니까? –

+0

정말 고마워요, 지금은 문제입니다! – tversteeg

2

내 코드를 컴파일하려면

gcc -o rec_mic rec_mic.c -lasound 

및 내 정적 라이브러리를 만들지 않고도 완벽하게 작동합니다.