美文网首页
交叉编译遇到的问题

交叉编译遇到的问题

作者: msrpp | 来源:发表于2019-03-07 11:51 被阅读1次

    近期给app端做了一个c++的sdk,为了方便后续的win的移植。网络库用了libevent,加密库openssl,序列化库jsoncpp/pb。pc端先运行调试完成。但是移植到移动端的时候遇到了许多问题。下面记录一下。

    openssl:

    rsa加密:

    2048bit情况下,每次加密的字段需要少于245字节,因此对于大于245字节的字段加密时,要分成n段加密,加密后的报文大小是n*256字节

    aes:
    原生接口特别难用,建议使用EVP_*开头的接口来完成加解密。

    ios

    这个是问题比较少的。先说这个。

    ios 是支持c语法的,因此移植上没有遇到什么问题。 配置好xcode工程,添加相应依赖库即可。

    openssl编译脚本: https://github.com/x2on/OpenSSL-for-iPhone

    libevent: https://github.com/szuwest/libevent_ios

    如果最后要压缩成一个库的话,需要先将静态依赖库用lipo命令先拆分成各个架构上的.a(i386,armv7,arm64...)文件。再将.a文件拆成.o文件,然后用ar命令将所有一样架构的.o文件打包成一个.a静态库,最后lipo - create将所有架构的静态库打包。
    这里由于ios工程可以直接将所有依赖的静态库都添加上去,所以不需要这个复杂的步骤也可以通过。

    android

    这个坑好多,libevent编译参考了 这个博客,https://www.cnblogs.com/swordy/p/4326290.html。但是这个有点问题会导致libevent没有可用的网络io模式可用。 android本质是个linux系统。因此也支持了poll,select。需要在event-config.h中添加一行#define _EVENT_HAVE_SELECT 1来支持select。

    2.感觉android对c++支持的不是很好,首先安卓默认首推使用stlport来开发,但是stlport不支持很多c++11语法,因此选择了gnustl。其次很多偏门的头文件甚至如uuid.h都找不到。

    3.遇到了一个问题,用std::thread起来的线程做libevent的loop线程会导致内部select失败(错误码,参数错误), 换成pthread方法才可以。(这个好坑啊)

    3.应该是jni开发的常见问题了。在java外部创建的线程如果想调用java方法,需要首先调用 jvm->AttachCurrentThread,否则会产生异常。

    相关文章

      网友评论

          本文标题:交叉编译遇到的问题

          本文链接:https://www.haomeiwen.com/subject/relelqtx.html