我想在 Linux 下给 paddleocr 添加个自定义函数编译成 so 供其他程序调用该怎么处理

74 天前
 cobbage
源代码可执行已经编译成功了。我是搞 java 的想在 linux 下编译成类似 win 下的 dll 的 so 。希望给个处理的步骤。
852 次点击
所在节点    程序员
6 条回复
Haku
74 天前
建议看看我的这个问题,形式不同但是方法是一致的。
https://www.v2ex.com/t/1003544
crackhopper
74 天前
我印象里,没有 main(当然动态库也有自己的 main),加上编译上带有--shared ,输出是 so ,就会形成动态库。其他主要就是写 makefile, cmake 之类的。好久没写了,我当年一般用 cmake 多一些,这样编译器标签什么的,基本都构建系统给你处理好了。就只需要项目编译组织对了就行,正确的添加好依赖,然后构建;一般项目应该都做好这些依赖的 link 配置了,当然 linking 出问题会比较麻烦,又很多细节,我也不展开说了,你可以先试试。
此外,.so 里面函数签名也有可能是麻烦的点,如果为了更好被别的语言调用,C 的封装接口更加易用一些( C++的 mangling 可能会导致查找符号上还挺困难的,但是如果项目本身是 C++的你会发现封装一层 C 接口也有不少工作量)。另一个常见做法是,在项目中添加比如 java 语言的头文件,然后对相关调用当前 java 提供的 native 函数进行封装,这样会直接导出 java 可有识别的函数。(我推测大概率可以,其他语言都有类似做法) java 的调用技术,应该叫 jni ?你可以自己多研究研究。我对 java 不太熟,只停留在表面使用。
LiaoMatt
74 天前
网络, JNI, JNA; 还有就是直接在 Java 里面起新进程调用可执行文件, 等到结束后在去读生成的文件
cobbage
72 天前
@LiaoMatt 用的是 JNA ,demo 可以了
cobbage
72 天前
@crackhopper demo 可以了
cobbage
72 天前
@Haku demo 可以了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1019302

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX