2010-07-05 2 views
4

참고 : 다음에서 파이썬을 언급 했음에도 불구하고 내 문제가 파이썬과 전혀 관련이없는 좋은 기회가 있습니다. 내가 언급 한 "모듈"을 언급하지 않는다면 적어도 내 문제에 대한 우려로 C 라이브러리와 동등합니다.공유 라이브러리에 정적으로 GSL (또는 다른 라이브러리) 링크하기

데비안에서 나는 C로 파이썬 모듈을 만들려고합니다. 그 모듈은 GSL을 사용합니다. 다음 메이크 파일을 성공적으로 컴파일 :이 모듈은 나보다 다른 (리눅스) 시스템에서 사용하도록되어

CC = gcc -Wall -fPIC -O3 
NAME = meinzeug 

matrizenwuerfler: $(SRC) 
$(CC) -o $(NAME).o -I/usr/lib/python2.5/site-packages/numpy/core/include -I/usr/include/python2.5 -c $(NAME).c 
$(CC) -shared -o $(NAME).so -lgsl -lgslcblas -lm $(NAME).o 

때문에, 나는 GSL 모듈에 포함되는 (또는 함께 제공)합니다.

그러나, 나는 메이크 파일의 마지막 줄에 옵션으로 -static을 추가 할 경우, 나는 다음과 같은 오류 얻을 :

gcc -Wall -fPIC -O3 -shared -o meinzeug.so -Wl,-Bstatic -lgsl -lgslcblas -lm meinzeug.o 
/usr/bin/ld: cannot find -lgcc_s 
collect2: ld returned 1 exit status 
: 다른 오류의 결과를 연결하는 라이브러리 전에 -Wl,-Bstatic 추가

gcc -Wall -fPIC -O3 -shared -static -o meinzeug.so -lgsl -lgslcblas -lm meinzeug.o 
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.3.2/crtbeginT.o: relocation R_X86_64_32 against `__DTOR_END__' can not be used when making a shared object; recompile with -fPIC 
/usr/lib/gcc/x86_64-linux-gnu/4.3.2/crtbeginT.o: could not read symbols: Bad value 
collect2: ld returned 1 exit status 

다른 작동하지 않는 내용 : GSL을 fPIC로 다시 컴파일, -static-libgcc, 옵션 순열. 아직 시도하지 않은 것은 fPIC 또는 이와 유사한 gcc를 컴파일하는 것입니다. 당신은 그래서 당신은 당신의 코드와 함께 GSL의 정적 라이브러리를 제공 할

gcc -Wall -fPIC -O3 -shared -static ... # shared and static at the same time ? 

을 할 수

답변

2

gcc -Wall -fPIC -O3 -shared -o meinzeug.so /usr/lib/libgsl.a -lm meinzeug. 

을보십시오.

하루가 끝나면 나는 GSL에 대한 의존성을 고수하고 유지할 것이다. 거의 모든 사람들이 가지고 있으며, API는 꽤 안정적입니다.

+0

첫 번째 제안이 작동하지 않습니다. 프로그램이 의 정의되지 않은 기호로 종료됩니다. gsl_rng_taus 이는 GSL을 전혀 연결하지 않은 경우와 같습니다. 내가 이해할 수없는 것은 '정적'과 '공유'가 모순되는 이유입니다. '-static'은 내 라이브러리에서 다른 라이브러리가 동적으로 링크되는 반면,'-shared '는 라이브러리가 동적으로 차례로 링크되도록합니다. GSL이 다른 시스템에서 사용 가능하다고 생각하는 경우 버전 또는 위치 불일치가있을 수 있습니까? – Wrzlprmft

+0

여기를 확인하십시오 : /usr/lib/libgsl.a 파일이 있습니까? –

+0

예, 도움이 될 수 있도록 프로그램 폴더에 복사했습니다. – Wrzlprmft

0

라이브러리 호출의 순서가 중요합니다. 필자는 /usr/lib/libgsl.a를 명령의 끝으로 보냈다. 그것으로 해결되었습니다.

관련 문제