При использовании Clang/LLC/WASM-LD для компиляции C в WASM, как я могу напрямую экспортировать целочисленную константу?

Учитывая следующий C, переданный в Clang, LLC, а затем WASM-LD для создания двоичного файла WASM:

__attribute__((visibility("default"))) const int an_export_name = 1234;

Генерируется WASM, эквивалентный следующему WAT:

(module
  (memory $memory (export "memory") 2)
  (global $an_export_name (export "an_export_name") i32 (i32.const 1024))
  (data (i32.const 1024) "\d2\04"))

Это, кажется, экспортировано:

  • Блок двоичных данных, содержащий значение 1234.
  • Константа i32, представляющая собой смещение внутри двоичного BLOB-объекта до этого значения (1024).

Можно ли вместо этого просто экспортировать значение? Например:

(module
  (memory $memory (export "memory") 2)
  (global $an_export_name (export "an_export_name") i32 (i32.const 1234)))
Включение UTF-8 в jsPDF с помощью Angular
Включение UTF-8 в jsPDF с помощью Angular
Привет, разработчики, я предполагаю, что вы уже знаете, как экспортировать pdf через jsPDF. Если ответ отрицательный, то вы можете ознакомиться с моей...
1
0
540
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В настоящее время из C/C++ можно экспортировать только функции и адреса данных.

Есть планы предоставить такие вещи, как глобальные объекты wasm, таблицы и другие конструкции для clang/llvm, но ни один из них пока не готов к использованию в производственной среде.

Итак, на данный момент вам нужно экспортировать адрес вашей константы вместе с памятью, в которой она живет, а затем встроенному устройству нужно прочитать константу из памяти.

Другие вопросы по теме