Я пытаюсь скомпилировать TIFF. js в файл WASM и клонировал последнюю версию https://github.com/seikichi/tiff.js/ В настоящее время он присутствует в репозитории npmjs, но в форме asm js. Он компилируется без ошибок (для правильной сборки потребовались небольшие изменения), но каким-то образом код с «нативной» стороны полностью игнорирует файловую систему Emscripten в памяти. Со стороны JavaScript я могу запустить что-то вроде этого:
var fp = Module.FS.open("/testfile.tiff", "w");
Module.FS.write(fp, new Uint8Array([22,23,24,25,26,27]), 0,6,0,true);
Module.FS.close(fp);
Это прекрасно работает - я могу FS.stat () этот файл размером JavaScript. Однако, если я добавлю функцию, подобную этой, в собственный код
bool FileExist(char *filename) {
struct stat buffer;
return (stat (filename, &buffer) == 0);
}
и вызову ее из JavaScript, она всегда говорит false - она не видит файл. Даже если я создаю файл на собственной стороне, а затем проверяю, существует ли он, его там не будет. Я делаю что-то не так, но не вижу, что и где?
Я также пытался скомпилировать версию asm js из исходных кодов и получил тот же результат - не могу увидеть файлы в нативном коде, поэтому я Предположим, это не связано с компиляцией WASM, а является более общим.
Я пытался создать отдельный проект, просто чтобы проверить, работает ли у меня FS, и в очень простой установке с одним файлом все работает просто отлично - Я могу создавать файлы из JS и Native и видеть все с обеих сторон.
Редактировать # 1: Я пытался протестировать веб-страницу из gh-страниц tiff. js repo, и это это код, который я поместил в нативную часть, в "export. c"
bool TestFile(char *filename)
{
struct stat buffer;
bool result = (stat(filename, &buffer) == 0);
perror(0);
return result;
}
Это то, что выполняется после получения изображения TIFF
const uint8arr = new Uint8Array(buffer);
console.log(uint8arr.length);
const filename = `image.tif`;
const path = `/${filename}`;
const stream = FS.open(path, "w");
FS.write(stream, uint8arr, 0, uint8arr.length, 0, true);
FS.close(stream);
console.log('FS.stat: ', FS.stat(path));
console.log('Module._TestFile: ', Module._TestFile(path));
И это это то, что я получаю в консоли браузера
8609
upload.html:86 FS.stat: {dev: 1, ino: 20, mode: 33206, nlink: 1, uid: 0, …}
tiff.js:1 No such file or directory
put_char @ tiff.js:1
write @ tiff.js:1
write @ tiff.js:1
doWritev @ tiff.js:1
_fd_write @ tiff.js:1
(anonymous) @ wasm-00509d86-761:1
(anonymous) @ wasm-00509d86-768:1
(anonymous) @ wasm-00509d86-769:1
(anonymous) @ wasm-00509d86-774:1
(anonymous) @ wasm-00509d86-37:1
Module._TestFile @ tiff.js:1
init @ upload.html:88
(anonymous) @ upload.html:174
load (async)
show @ upload.html:163
(anonymous) @ upload.html:207
dispatch @ jquery-2.0.3.min.js:5
y.handle @ jquery-2.0.3.min.js:5
upload.html:88 Module._TestFile: 0
Когда я делаю то же самое в пустом проекте, он отлично работает.