mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-02-06 06:55:07 +00:00
iwasm: call native lib init/deinit if exists (#2439)
This commit is contained in:
parent
490fa2ddac
commit
a550f4d9f7
|
@ -284,6 +284,8 @@ validate_env_str(char *env)
|
|||
#if BH_HAS_DLFCN
|
||||
typedef uint32 (*get_native_lib_func)(char **p_module_name,
|
||||
NativeSymbol **p_native_symbols);
|
||||
typedef int (*init_native_lib_func)(void);
|
||||
typedef void (*deinit_native_lib_func)(void);
|
||||
|
||||
static uint32
|
||||
load_and_register_native_libs(const char **native_lib_list,
|
||||
|
@ -304,6 +306,18 @@ load_and_register_native_libs(const char **native_lib_list,
|
|||
continue;
|
||||
}
|
||||
|
||||
init_native_lib_func init_native_lib = dlsym(handle, "init_native_lib");
|
||||
if (init_native_lib) {
|
||||
int ret = init_native_lib();
|
||||
if (ret != 0) {
|
||||
LOG_WARNING("warning: `init_native_lib` function from native "
|
||||
"lib %s failed with %d",
|
||||
native_lib_list[i], ret);
|
||||
dlclose(handle);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* lookup get_native_lib func */
|
||||
get_native_lib_func get_native_lib = dlsym(handle, "get_native_lib");
|
||||
if (!get_native_lib) {
|
||||
|
@ -368,6 +382,12 @@ unregister_and_unload_native_libs(uint32 native_lib_count,
|
|||
continue;
|
||||
}
|
||||
|
||||
deinit_native_lib_func deinit_native_lib =
|
||||
dlsym(handle, "deinit_native_lib");
|
||||
if (deinit_native_lib) {
|
||||
deinit_native_lib();
|
||||
}
|
||||
|
||||
dlclose(handle);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,6 +62,7 @@ cd build
|
|||
The output is:
|
||||
|
||||
```bash
|
||||
init_native_lib in test_hello2.c called
|
||||
Hello World!
|
||||
10 + 20 = 30
|
||||
sqrt(10, 20) = 500
|
||||
|
@ -72,5 +73,6 @@ Message from test_hello: Hello, main. This is test_hello_wrapper!
|
|||
test_hello2("main", 0x0, 0) = 85
|
||||
malloc(86) = 0x24e8
|
||||
test_hello2("main", 0x24e8, 86) = 85
|
||||
Message from test_hello2: Hello, main. This is test_hello2_wrapper! Your wasm_module_inst_t is 0x7fd443704990.
|
||||
Message from test_hello2: Hello, main. This is test_hello2_wrapper! Your wasm_module_inst_t is 0x7fe0e6804280.
|
||||
deinit_native_lib in test_hello2.c called
|
||||
```
|
||||
|
|
|
@ -57,3 +57,16 @@ get_native_lib(char **p_module_name, NativeSymbol **p_native_symbols)
|
|||
*p_native_symbols = native_symbols;
|
||||
return sizeof(native_symbols) / sizeof(NativeSymbol);
|
||||
}
|
||||
|
||||
int
|
||||
init_native_lib()
|
||||
{
|
||||
printf("%s in test_hello2.c called\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
deinit_native_lib()
|
||||
{
|
||||
printf("%s in test_hello2.c called\n", __func__);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user