-
Notifications
You must be signed in to change notification settings - Fork 756
Description
测试平台:Win10
Wamr版本2.4.4:
wasi-sdk版本:24.0
我使用cmake命令:
cmake -G "Unix Makefiles" -DWASI_SDK_PREFIX=E:/WorkSpace/wamr_source/wasi-sdk-24.0-x86_64-windows -DCMAKE_TOOLCHAIN_FILE=E:/WorkSpace/wamr_source/wasi-sdk-24.0-x86_64-windows/share/cmake/wasi-sdk.cmake -DCMAKE_SYSROOT=E:/WorkSpace/wamr_source/wasi-sdk-24.0-x86_64-windows/share/wasi-sysroot ..
分使用-nostdlib和不使用-nostdlib 来 编译testapp.c (主机配置和示例来自sample/basic)
生成两个wasm:
testapp.wasm(带-nostdlib --no-entry)
testapp1.wasm(不带-nostdlib --no-entry)
target_link_options(testapp1.wasm PRIVATE
#-nostdlib -O3 #clang driver 选项(直接给 clang)
#LINKER:--strip-all,--no-entry #ok
LINKER:--export=__heap_base #用来指示libc堆的基地址
LINKER:--export=__data_end #指示数据区的结束位置
LINKER:--export=malloc
LINKER:--export=free
#LINKER:--export=__wasm_call_ctors
LINKER:--export=generate_float
LINKER:--export=float_to_string
LINKER:--export=calculate
LINKER:--export=mul7
LINKER:--export=wasm_test1
LINKER:--shared-memory
LINKER:--max-memory=6291456 #65536*96
LINKER:--initial-memory=2097152
LINKER:-zstack-size=524288
LINKER:--no-check-features
LINKER:--allow-undefined
)
testapp1.wasm仅注释了-nostdlib 和 LINKER:--strip-all,--no-entry
我在主机上调用了wasm内部的函数wasm_test(),然后在wasm_test()中调用了主机本地函数native_test()。然后在native_test()中创建socket tcp client连接本地服务器127.0.0.1:5077。
结果:
testapp.wasm可以正常连接,
testapp1.wasm 在connect或::connect的时候崩溃了:
0x0000000000000000 处(位于 TestDriver.exe 中)引发的异常: 0xC0000005: 执行位置 0x0000000000000000 时发生访问冲突。
问题:
为什么不带-nostdlib --no-entry的wasm app不能使用connect,connect函数的地址似乎和本地不一样,是被lic-wasi内置的connect给覆盖了?
请大神解惑!感谢!