Попытка заставить код на C найти размер каталога для компиляции с Emscripten
У меня проблема с компиляцией моего кода на C с помощью emscripten; забавно, что это мое первое сообщение на stack overflow, поскольку в большинстве случаев, когда у меня возникает проблема, связанная с системой или языком программирования, есть уже существующий вопрос, на который я могу сослаться, чтобы получить ответ, однако в данном случае все иначе. Я пытаюсь отобразить размер моего корневого каталога Django на веб-странице, вот код на C, который я пытаюсь скомпилировать.
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <ftw.h>
#include <sys/types.h>
#include <sys/stat.h>
static unsigned int total = 0;
int sum(const char *fpath, const struct stat *sb, int typeflag)
{
total += sb->st_size;
return 0;
}
int main()
{
char *DJANGO_ROOT = "/usr/src/app";
if (!DJANGO_ROOT || access(DJANGO_ROOT, R_OK))
{
return 1;
}
if (ftw(DJANGO_ROOT, &sum, 1))
{
perror("ftw");
return 2;
}
printf("%s: %u\n", DJANGO_ROOT, total);
return 0;
}
Это вывод, который я получаю при попытке скомпилировать файл с помощью "emcc dir_size.c -o dir_size.html"
yalt@mainframe:~/Network/Mainframe/rabbithole_site/django_root/my_app/static/js/wasm/dir_size$ emcc dir_size.c -o dir_size.html
error: undefined symbol: ftw (referenced by top-level compiled C/C++ code)
warning: Link with `-sLLD_REPORT_UNDEFINED` to get more information on undefined symbols
warning: To disable errors for undefined symbols use `-sERROR_ON_UNDEFINED_SYMBOLS=0`
warning: _ftw may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
Error: Aborting compilation due to previous errors
emcc: error: '/home/yalt/emsdk/node/14.18.2_64bit/bin/node /home/yalt/emsdk/upstream/emscripten/src/compiler.js /tmp/tmpwyeoj1vu.json' failed (returned 1)
yalt@mainframe:~/Network/Mainframe/rabbithole_site/django_root/my_app/static/js/wasm/dir_size$
Как мне кажется, emcc испытывает некоторые трудности с распознаванием функции file tree walk (ftw); однако я не знаю, как правильно передать эту функцию компилятору, поскольку я совсем новичок в Emscripten и webassembly в целом.
Любая помощь/советы будут очень признательны!
Ближайшая проблема заключается в том, что функция ftw не включена в libc emscripten.
Однако, даже если он был включен или повторно реализован, программа, вероятно, не будет делать то, что вы хотите. /usr/src/app звучит как каталог, существующий на сервере, но код WebAssembly обычно выполняется на клиенте и использует свой собственный уровень файловой системы, обычно файловую систему в памяти, поэтому вы не сможете получить доступ к файловой системе сервера вообще.