mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 11:30:18 +00:00
...
This commit is contained in:
parent
74f4575778
commit
7f289c4201
58
docs/quick-start/dylib.md
Normal file
58
docs/quick-start/dylib.md
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
icon: dot
|
||||||
|
label: 'Using dynamic library'
|
||||||
|
order: 45
|
||||||
|
---
|
||||||
|
|
||||||
|
You can import a native module from a dynamic library at runtime.
|
||||||
|
This feature is supported on Windows, Linux, macOS, and Android.
|
||||||
|
|
||||||
|
## Create a module as a dynamic library
|
||||||
|
|
||||||
|
Implement a `pkpy_module__init__` function and export it as a symbol.
|
||||||
|
This is the entry point of the module. When users call `__import__` function,
|
||||||
|
the VM will call this function to initialize the module.
|
||||||
|
|
||||||
|
You can create one or more modules inside `pkpy_module__init__` function,
|
||||||
|
and return the name of the module you want users to import directly.
|
||||||
|
|
||||||
|
You should use C-APIs to interact with the VM in the dynamic library.
|
||||||
|
This is to make sure the dynamic library is compatible with different compilers.
|
||||||
|
|
||||||
|
```c
|
||||||
|
#include "pocketpy_c.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static int hello(pkpy_vm* vm){
|
||||||
|
printf("Hello from dylib!\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
PK_EXPORT
|
||||||
|
const char* pkpy_module__init__(pkpy_vm* vm, const char* version){
|
||||||
|
printf("version: %s\n", version);
|
||||||
|
pkpy_push_function(vm, "hello()", hello);
|
||||||
|
pkpy_push_module(vm, "test");
|
||||||
|
pkpy_setattr(vm, pkpy_name("hello"));
|
||||||
|
// check if initialization failed
|
||||||
|
if(pkpy_clear_error(vm, NULL)) return NULL;
|
||||||
|
return "test";
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Load a dynamic library
|
||||||
|
|
||||||
|
You can load a dynamic library with `__import__` function with a path to the library.
|
||||||
|
|
||||||
|
```python
|
||||||
|
test = __import__("test.dll") # Windows
|
||||||
|
|
||||||
|
test = __import__("libtest.so") # Linux
|
||||||
|
|
||||||
|
test = __import__("libtest.dylib") # macOS
|
||||||
|
|
||||||
|
test = __import__("libtest.so") # Android
|
||||||
|
|
||||||
|
test.hello() # Hello from dylib!
|
||||||
|
```
|
Loading…
x
Reference in New Issue
Block a user