Довольно распространенный прием, наиболее часто используемый для самораспаковывающихся архивов или языка сценариев для исполняемых компиляторов, заключается в добавлении ресурсов в конец исполняемого файла.
Windows:
copy app.exe+all-resources app-with-resources.exe
Linux:
cp executable executable-with-resources
cat all-resources >>executable-with-resources
Затем вы можете прочитать свой собственный исполняемый файл, используя, например, fopen(argv[0])
.Чтобы перейти в правильную позицию, то есть в начало ресурсов, возможное решение - сохранить размер исполняемого файла без ресурсов в качестве последнего слова файла.
FILE* fp = fopen(argv[0], "rb");
fseek(fp, -sizeof(int), SEEK_END);
int beginResourcesOffset;
fread(&beginResourcesOffset, 1, sizeof(int), fp);
fseek(fp, beginResourcesOffset, SEEK_SET);
Будьте осторожны с этим решением, хотяАнтивирус на окнах иногда не нравится.Возможно, есть лучшие решения.