참고 : 다음에서 파이썬을 언급 했음에도 불구하고 내 문제가 파이썬과 전혀 관련이없는 좋은 기회가 있습니다. 내가 언급 한 "모듈"을 언급하지 않는다면 적어도 내 문제에 대한 우려로 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 ?
을 할 수
첫 번째 제안이 작동하지 않습니다. 프로그램이 의 정의되지 않은 기호로 종료됩니다. gsl_rng_taus 이는 GSL을 전혀 연결하지 않은 경우와 같습니다. 내가 이해할 수없는 것은 '정적'과 '공유'가 모순되는 이유입니다. '-static'은 내 라이브러리에서 다른 라이브러리가 동적으로 링크되는 반면,'-shared '는 라이브러리가 동적으로 차례로 링크되도록합니다. GSL이 다른 시스템에서 사용 가능하다고 생각하는 경우 버전 또는 위치 불일치가있을 수 있습니까? – Wrzlprmft
여기를 확인하십시오 : /usr/lib/libgsl.a 파일이 있습니까? –
예, 도움이 될 수 있도록 프로그램 폴더에 복사했습니다. – Wrzlprmft