一、背景
项目需要跨语言调用,完成相应的功能,由于公司环境需要使用开源MinGW编译环境完成对C++的编译,而第三方提供的库是msvc环境下编译完成的,编译环境不一致,在调用过程中出现了异常,无法加载完成对应功能,出现了错误:“error:ld returned 1 exit status”。
二、问题分析
1、从“error:ld returned 1 exit status”入手,发现是编译器差异导致加载异常。
2、在网上找了各种方法,进行包转换操作,可能是技术不成熟,亦或者是操作不当导致无法成功。不建议在包转换上下功夫,成本代价太高。
三、解决方法
1、修改库的编译方式,找到开源库源码将C++库在MinGW环境下编译,完成调用;
2、申请MSVC编译器环境完成编译,完成Java调用接口编译。
四、启发
如果是在Windows环境下运行,建议使用MSVC编译环境,这样在Java调用时无需将标准打包即可运行,如果使用MinGW环境编译,则需要将MinGW标准环境打包,这样Java调用包就会很大,如果不将标准环境打包,就需要用户环境下安装MinGW环境,对用户不友好,个人看法,仅供参考。
以上总结为个人在工作中的实践总结,仅供参考,如发现错误和不足,欢迎指教!随时欢迎学习交流。