제가 만든 작은 프로그램에는 바이너리 자체에 포함시키려는 작은 비트 맵과 사운드 클립이 많이 포함되어 있습니다 (어쨌든 메모리 매핑이 필요합니다). MS PE/COFF 표준에는 좋은 파일 시스템과 같은 계층 구조를 갖는 리소스 (.rsrc 섹션)를 포함시키는 방법에 대한 구체적인 설명이 있습니다. Linux ELF 사양에서 그런 부분을 찾지 못했습니다. 따라서이 리소스를 자유롭게 포함 할 수 있다고 생각합니다.한 섹션에 그룹화 된 ELF 객체에 리소스를 추가하십시오.
달성하고자하는 것은 각 리소스의 시작 부분에 심볼릭 이름과 함께 하나의 ELF 섹션에만 모든 리소스를 포함 할 수 있다는 것입니다 (따라서 C 코드에서 해당 리소스를 처리 할 수 있습니다). 내가 쉽게 내 C 코드로 연결 될 수있는 ELF 객체에이를 조립할 수
SECTION .rsrc
_resource_1:
incbin "../rsrc/file_name_1"
_resource_1_length:
dw $-resource_1
_resource_2:
incbin "../rsrc/file_name_2"
_resource_2_length:
dw $-resource_2
...
: 내가 지금 뭐하는 거지하면 다음과 레이아웃이 작은 NASM 파일을 사용하고 있습니다. 그러나, 나는 어셈블리의 사용을 싫어하므로 내 코드는 플랫폼에 따라 다르다.
동일한 결과를 얻는 더 좋은 방법은 무엇입니까?
이 질문에 이미 유래에 물었지만, 제안 된 솔루션은 내 경우에 적용되지 않습니다되었습니다 C 코드의 진수 배열이 정말 아니므로 자원을 포함 C/C++ with GCC: Statically add resource files to executable/library :이 솔루션은 여기에 제안
- 유용하기 때문에 코드와 데이터가 하나의 섹션에 혼합되어 있습니다. (게다가 리소스를 배열로 변환하면 리소스를 미리 볼 수 없으므로 실용적이지 않습니다.)
- 모든 리소스에
objcopy --add-section
을 사용하면 모든 리소스가 작동하지만 모든 리소스는 헤더와 그 모든 것을 포함하여 자체 섹션을 가져옵니다. 그건 내가 약 120 파일을 포함 (각각 +/- 4K)로 조금 낭비가 보인다.
"__section"GCC 키워드는 16 진수 배열을 포함하는 제안 된 솔루션과 함께 사용할 수 있습니다. "배열"파일을 빌드 환경의 바이너리 "부모"에 종속시킴으로써 파일을 미리 볼 수 있습니다. –