编译sdk动态库但对外接口不用std::__ndk1
时间: 2023-08-02 07:08:44 浏览: 167
如果您想编译 SDK 动态库,并且对外接口不使用 `std::__ndk1`,您可以按照以下步骤进行:
1. 在您的代码中,使用 `extern "C"` 将函数声明包围起来,例如:
```cpp
#ifdef __cplusplus
extern "C" {
#endif
int my_function(int arg1, int arg2);
#ifdef __cplusplus
}
#endif
```
这将在 C++ 代码中指定函数使用 C 语言的调用约定。
2. 在编译时,将 `-fPIC` 和 `-shared` 选项传递给编译器,例如:
```
g++ -fPIC -shared -o libmylibrary.so mycode.cpp
```
使用 `-fPIC` 选项将代码编译为位置无关代码,以便在动态链接时能够正确地解析符号(函数和全局变量)。使用 `-shared` 选项将代码编译为动态链接库。
3. 在链接时,使用 `-Wl,-soname` 选项指定动态库的 soname,例如:
```
g++ -fPIC -shared -Wl,-soname,libmylibrary.so.1 -o libmylibrary.so.1.0.0 mycode.cpp
```
这将生成一个名为 `libmylibrary.so.1.0.0` 的动态库,并将其 soname 指定为 `libmylibrary.so.1`。
4. 在使用动态库时,需要在链接时指定 `-lmylibrary` 选项,例如:
```
g++ myapp.cpp -L/path/to/lib -lmylibrary
```
这将链接到您的动态库,并使其可用于您的应用程序。
需要注意的是,如果您的代码中使用了特定于 NDK 的 API 或库,则无法在不依赖 NDK 的情况下进行编译。
阅读全文