
나는 매우 최소한의 사용자 정의 Busybox/Linux 배포판을 만들려고 노력하고 있습니다. 이 작업은 확실히 내 머리 위에 있는 작업이지만 시도해 볼 것이라고 생각했습니다. 내 문제는 Busybox나 Busybox 유틸리티가 아닌 C 프로그램을 실행하려고 할 때마다 Ash가 불평하고 파일을 찾을 수 없다고 알려준다는 것입니다. 저는 Arch 시스템에서 파티션을 마운트하고 GNU binutils와 uClibc를 설치했습니다. 주사위가 없습니다. 나는 또한 어떤 라이브러리에도 의존하지 않고 제가 생각할 수 있는 가장 간단한 C 프로그램을 작성했습니다.
int main(int argc, char *argv[])
{
return 0;
}
Arch에서 컴파일하고 실행했는데도 Busybox 시스템에서 "파일을 찾을 수 없습니다"라는 메시지가 표시되었습니다. 하지만 ls를 실행할 때 표시됩니다. 명백한 문제를 해결하기 위해 프로그램과 동일한 디렉토리에서 실행하고 ./
파일 이름 앞에 입력했습니다.
답변1
내 생각엔 Busybox 시스템에 올바른 동적 링커가 없는 것 같습니다.
아치 시스템에서 다음을 수행하십시오: 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 시스템에 파일이 없을 수도 있습니다 . libc.so
Arch에서 Busybox 시스템으로 동적 링커 파일을 복사하는 것 (디렉토리 보존!)이 작동할 수도 있지만 그렇지 않을 수도 있습니다. 잘 모르겠습니다.
시도해 볼만한 한 가지: musl
Arch 시스템에 설치하십시오. 를 사용하여 간단한 프로그램을 컴파일하고 musl-gcc -static -o simple simple.c
동적으로 연결되지 않은 실행 파일을 이동한 다음 Busybox 시스템에서 사용해 보세요.
답변2
uClibc 툴체인을 구축하거나 설치하고 이를 사용하여 프로그램을 컴파일/링크해야 합니다. 표준 gcc/make/....로 컴파일하지 않습니다.