Как заставить wasm-ld учитывать атрибут wasm-import-module - PullRequest
0 голосов
/ 06 февраля 2020

Исправлено: я установил класс хранилища DLL импортируемой функции на dllimport, и это позволило wasm-ld выдавать правильное пространство имен импорта.

Я создаю компилятор с помощью LLVMSharp * библиотека, и она испускает файлы модуля LLVM .b c, предназначенные для wasm32-unknown-unknown. Я пытаюсь импортировать функции из интерфейса WASI, помечая эти значения функций атрибутом { "wasm-import-module"="wasi_unstable" }. (Это должно быть эквивалентно тому, что clang делает с __attribute__((import_module(<module_name>))); см. здесь ). Однако, когда я передаю полученные файлы .b c в wasm-ld (установленная версия Windows 64-bit 9.0.0), полученный модуль .wasm все еще импортирует эти функции из "env", что не работа.

Есть ли какая-либо опция для перехода к wasm-ld, чтобы он правильно обрабатывал wasm-import-module, или мне нужно go другой маршрут?

* В частности, я ' используя LLVMSharp 5.0.0, который является последней стабильной версией. Возможно, LLVMSharp 8.0.0 может поддерживать сборку модулей .wasm, но для него не выпущен релиз NuGet, и у бета-версии NuGet есть некоторые проблемы, которые мешают мне обновиться. Вот почему я еду по самому дорогому маршруту.

1 Ответ

0 голосов
/ 06 февраля 2020

wasm-ld должен поддерживать этот атрибут. Первое, что нужно проверить - это ваш объектный файл.

Вы можете использовать llvm-readobj --syms для вывода символов в ваш объектный файл. Вы должны увидеть ImportModule: foo на своем символе, где foo - это имя модуля, которое вы указали в своем атрибуте.

Мне кажется, что поддержка для этого приземлилась в wasm-ld в: https://reviews.llvm.org/D45796

Я полагаю, что это изменение произошло незадолго до 11.0, поэтому вы получите 8.0 или более позднюю версию.

...