Как заставить wasm-ld соблюдать атрибут wasm-import-module
Исправлено: я установил класс хранения DLL для функции, в которую я импортировал dllimport
, и это позволило wasm-ld выдать правильное пространство имен импорта.
Я создаю компилятор с библиотекой LLVMSharp*, и он генерирует файлы модуля LLVM .bc, предназначенные для wasm32-unknown-unknown
. Я пытаюсь импортировать в него функции из интерфейса WASI, помечая значения этих функций с помощью{ "wasm-import-module"="wasi_unstable" }
атрибут. (Это должно быть эквивалентно тому, что clang делает с__attribute__((import_module(<module_name>)))
; см. здесь). Однако, когда я передаю полученные файлы.bc в wasm-ld (установленная 64-разрядная версия Windows 9.0.0), полученный модуль.wasm по-прежнему импортирует эти функции из"env"
, что не работает.
Есть ли возможность передать wasm-ld, чтобы он обработал wasm-import-module
правильно, или мне нужно идти другим маршрутом?
* В частности, я использую LLVMSharp 5.0.0, последнюю стабильную версию. Возможно, что LLVMSharp 8.0.0 может поддерживать сборку модулей.wasm, но для него нет выпуска NuGet, а у бета-версии NuGet есть некоторые проблемы, которые не позволяют мне выполнить обновление. Вот почему я иду по пути wasm-ld.
1 ответ
Wasm -ld должен поддерживать этот атрибут. Первое, что нужно проверить, это ваш объектный файл.
Ты можешь использовать llvm-readobj --syms
чтобы сбросить символы в ваш объектный файл. Тебе следует увидетьImportModule: foo
на вашем символе, где foo
- это имя модуля, которое вы указали в своем атрибуте.
Похоже, поддержка этого появилась в wasm-ld в: https://reviews.llvm.org/D45796
Я считаю, что это изменение появилось незадолго до llvm 8.0, поэтому вы будете использовать llvm 8.0 или выше.