`__heap_base`, кажется, отсутствует в clang 9.0.0, есть ли замена? - PullRequest
1 голос
/ 06 октября 2019

Я пытаюсь скомпилировать мою библиотеку C для WebAssembly, используя clang (без emscripten), и она прекрасно компилируется с clang version 8.0.1, но не с clang version 9.0.0. Сообщенная ошибка wasm-ld: error: ….o: undefined symbol: __heap_base. __heap_base был заменен каким-либо другим символом?

Библиотека с открытым исходным кодом и инструкции по компиляции можно найти здесь

Ответы [ 2 ]

2 голосов
/ 08 октября 2019

На самом деле, я считаю, что нашел виновника: компоновщик в 9.0.0, кажется, требует --export=__heap_base (-Wl,--export=__heap_base для clang). Это работает для моего проекта.

1 голос
/ 07 октября 2019

Это похоже на ошибку в 9.0.0. Похоже, что это не происходит с ToT или с 8.0.0.

Простой случай воспроизведения:

extern void* __heap_base;

void* a = &__heap_base;

void _start() {
}

Сборка с:

$ clang --target=wasm32 test.c -nostdlib -Wl,-no-gc-sections

С 9.0.0:

wasm-ld: error: /tmp/test-551a5c.o: undefined symbol: __heap_base
clang-9: error: linker command failed with exit code 1 (use -v to see invocation)

Это должно быть открыто как ошибка в багтрекере llvm.

...