rm의 정적 바이너리를 만들려고하므로 coreutils를
configure; make SHARED=0 CC='gcc -static'; make install
하지만 계속 오류가 발생합니다.
먼저 c99 또는 gnu99에 대해 불평하고 CC 값에 -std = gnu99를 추가하여 해결했습니다.
make SHARED=0 CC='gcc -static -std=gnu99'
그 후 다음과 같이 표시됩니다.
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.8/crtbeginT.o: relocation R_X86_64_32 against `__TMC_END__' can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-linux-gnu/4.8/crtbeginT.o: error adding symbols: Bad value
-std 옵션을 추가 한 것처럼 -fPIC를 추가하려고했지만 아무 소용이 없었습니다.
coreutils의 정적 바이너리를 만드는 것이 가능합니까? (rm에만 관심이 있음) 그렇다면 어떻게? (저는 리눅스 바이너리 빌드 경험이 없습니다)
추신 : 우분투 사이트 trusty에서 coreutils 소스를 다운로드했습니다. (coreutils-8.21)
버그 # 640734 에 대한 이 주석 에 따라 시도해 볼 수있는 해결 방법이 있습니다.
$ cd /usr/lib/gcc/x86_64-linux-gnu/4.8
$ sudo cp crtbeginT.o crtbeginT.orig.o
$ sudo cp crtbeginS.o crtbeginT.o
또한 -fPIC
위의 명령에 추가하십시오 .
make SHARED=0 CFLAGS='-static -std=gnu99 -static-libgcc -static-libstdc++ -fPIC'
컴파일이 끝나면 다음과 같이 원본 파일을 복원하십시오.
$ cd /usr/lib/gcc/x86_64-linux-gnu/4.8
$ sudo cp crtbeginT.orig.o crtbeginT.o
$ sudo rm crtbeginT.orig.o
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다