
C++编译so文件与C编译so一样都是加参数 -shared
C语言调用C++的so
首先C要调用的C++的函数必须是extern "C"声明的。
其次编译C程序时需要增加链接libstdc++so(可能名字不打对自己查查)
Jni调用就行了,是要按规则写接口api,如果接口很多,也没法,那是你的业务问题,要重新设计业务逻辑。我们之前用的c++单独交叉编译一个进程,和安卓界面用tcp通信,如果接口多也以为着协议多,一样的。
1,如果同时打开静态库和运行程序调用,调式模式下,可以进入静态库的内部函数进行调试;
2,其实不用把shadow build取消勾选;文件输出的文件就是liba的文件,可以在shadow目录里面很方便找到;
3,新的项目使用的时候,就是让其能找到liba,和该库的h头文件;
4,QT的编译输出的静态库名字会自动在项目名字前加lib三个字,后缀是a;
5, QT515的编程的工程与该例子中缺少“需要什么模块就添加什么”的部分;
-lxx
xx是你的so文件名
其实使用方法和你使用数学库函数是一样的,源代码中添加
#include <mathh>,编译的时候,加上-lm参数。
注:linux下的so文件为共享库,相当于windows下的dll文件。
扩展资料:
linux下编写调用so文件实例
so是Linux(Unix)下的动态链接库 和dll类似
比如:
文件有: ac, bc, cc
gcc -c ac
gcc -c bc
gcc -c cc
gcc -shared libXXXso ao bo co
要使用的话也很简单 比如编译dc, 使用到libXXXso中的函数, libXXXso地址是MYPATH
gcc dc -o d -LMYPATH -lXXX
注意不是-llibXXX
testc文件和一个testh,这两个文件要生成libsotestso文件。然后我还有一个testsoc文件,在这个文件里面调用libsotestso中的函数。
编写的过程中,首先是编译so文件,我没有编写makefile文件,而是参考的2里面说的直接写的gcc命令。
因为so文件里面没有main函数,所以是不可执行的,所以编译的时候要加上-c,只生成目标文件。
以上就是关于c#在linux系统下调用c++的so文件,该怎么处理全部的内容,包括:c#在linux系统下调用c++的so文件,该怎么处理、C/C++源文件直接交叉编译生成.so文件供安卓应用程序调用,可以吗、linux下qt程序怎么静态调用libqt5core.so等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)