Попытка заставить код на 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 обычно выполняется на клиенте и использует свой собственный уровень файловой системы, обычно файловую систему в памяти, поэтому вы не сможете получить доступ к файловой системе сервера вообще.

Вернуться на верх