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