저는 매우 작은 사용자 정의 Busybox/Linux 배포판을 만들려고 노력 중입니다. 이는 분명히 제 능력을 넘어서는 작업이지만 시도해 보아야겠다고 생각했습니다. 내 문제는 Busybox나 Busybox 유틸리티가 아닌 C 프로그램을 실행하려고 할 때마다 Ash가 불평하고 파일을 찾을 수 없다고 말하는 것입니다. 저는 Arch 시스템에서 파티션을 마운트하고 GNU binutils와 uClibc를 설치했습니다. 나는 또한 어떤 라이브러리에도 의존하지 않는 가장 간단한 C 프로그램을 작성했습니다.
int main(int argc, char *argv[])
{
return 0;
}
Arch에서 컴파일하고 실행했지만 ls를 실행할 때 표시되는데도 Busybox 시스템에 여전히 "파일을 찾을 수 없습니다"라는 메시지가 표시됩니다. 명백한 문제를 해결하기 위해 프로그램과 동일한 디렉토리에서 실행하고 ./
파일 이름 앞에 입력했습니다.
답변1
내 생각엔 Busybox 시스템에 올바른 동적 링커가 없는 것 같습니다.
Arch 시스템에서 다음을 수행하십시오: ldd ./simplestprogram
ldd
나는 당신에게 다음과 같은 결과를 주고 싶습니다 :
linux-vdso.so.1 => (0x00007fff9b34f000)
libc.so.6 => /lib64/libc.so.6 (0x0000003b19e00000
/lib64/ld-linux-x86-64.so.2 (0x0000003b19a00000)
마지막 줄 /lib64/ld-linux-x86-64.so.2
은 동적 링커입니다. 귀하의 Busybox 시스템에는 이 기능이 없을 것 같습니다.
내 Arch 노트북에서 "hello, world" 프로그램을 컴파일하고, 바이너리 모드로 사용하고, 로 vim
변경하고 , 저장하고 실행해 보았습니다. 저도 당신과 같은 "파일을 찾을 수 없습니다"라는 메시지를 받았습니다./lib64/ld-linux-x86-64.so.2
/lib65/ld-linux-x86-64.so.2
libc.so
Busybox 시스템에 이 파일이 없을 수도 있습니다. Arch에서 Busybox 시스템으로 동적 링커 파일을 복사하는 것 libc.so
(디렉토리 유지!)이 작동할 수도 있지만 작동하지 않을 수도 있습니다. 잘 모르겠습니다.
시도해 볼만한 한 가지: musl
Arch 시스템에 설치하십시오. 간단한 프로그램 컴파일을 사용하여 musl-gcc -static -o simple simple.c
실행 파일(동적으로 링크된 항목 없음)을 이동하고 Busybox 시스템에서 사용해 보세요.
답변2
uClibc 툴체인을 빌드하거나 설치하고 이를 사용하여 프로그램을 컴파일/링크해야 합니다. 표준 gcc/make/...를 사용하여 컴파일할 수 없습니다.