내 Linux 시스템에서 현재 gcc-6.3을 사용하여 이전 버전의 Linux(3.4)를 컴파일하려고 합니다. 그러나 make 명령을 실행하면 다음 오류가 표시됩니다.
scripts/kconfig/conf.o: relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC
그리고 아직 해결책을 찾지 못했습니다. gcc에는 일부 개체에 대한 fPIC 플래그가 필요한 것으로 나타납니다. 이는 3.4 커널 프로필에서는 필요하지 않습니다. 가급적이면 커널 기본값을 건드리고 싶지 않습니다. 이 플래그 요구를 중지하거나 비활성화하도록 gcc에 어떻게 요청해야 합니까?
답변1
내 생각엔 당신이 사용하고 있는 gcc 버전이 기본적으로 PIE(Position Independent Executable)를 생성하도록 수정된 것 같습니다. 이에 따르면페이지적어도 우분투는 이러한 전환을 이루었습니다. 이 디렉토리의 코드는 scripts/kconfig
커널에 연결되지 않고 (내가 아는 한) 외부 정적 라이브러리에 연결되지 않는 도우미 프로그램을 위한 것입니다. 따라서 기본값이 무엇인지는 중요하지 않습니다.~하지 않는 한기본값이 다른 컴파일러 버전을 마지막으로 실행했을 때 남은 부분이 있습니다. 실행 make clean
하고 다시 컴파일하십시오.
도움이 되지 않으면 확인해 보세요.파일 생성현재 커널의 경우 이는 -no-pie
.
답변2
어떤 오류를 해결하더라도 다음 컴파일 시도에서는 새로운 오류가 나타납니다. 불행하게도 내가 찾은 최고의 해결책은 오래된 gcc를 사용하여 이 커널을 컴파일하는 것입니다.