내가이 최소한의 TEST.C에 문제를 감소했습니다정적 링크
#include "png.h"
int function() {
printf("%ld", (long)png_create_read_struct);
}
이
gcc -shared -fPIC test.c -o test.so -lm -l:libpng16.a
로 컴파일 에러 이제
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/libpng16.a(pngread.o): relocation R_X86_64_PC32 against symbol `png_sRGB_table' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
에게 제공 이 오류에서 발견 한 모든 대답은 "-fPIC으로 말하고 다시 컴파일하십시오."라고 말하지만, 이미 알 수 있듯이 이미 그렇게하고 있습니다. 그래서 무엇을 제공합니까?
(출력 위 libpng16와 우분투 17.10에서입니다. 우분투 16.04 유사한 오류 libpng12 결과로.)
아니요, 이미 그렇게하지 않았습니다. 링커는'libpng16.a'에있는 객체들을 PIC로 만들고 싶지 않습니다. * 그것은'-fPIC'으로 다시 컴파일하기를 원하는 것입니다. –
libpng 공유 라이브러리를 링크하지 않는 이유는 무엇입니까? –
@JohnBollinger 그래서 apt 패키지에 포함 된 정적 라이브러리는 이것을 위해 준비되지 않았으며 정적으로 링크하려는 모든 것을 다시 컴파일해야합니다. 조금도. .a 파일이 -fPIC로 컴파일되었는지 확인할 방법이 있습니까? (추신 : 제발 답변을 귀하의 의견을주세요) –