swig java_2019-02-01 使用swig转化C++到Java

1. 写一个swig的interface.i文件

2. swig -c++ -java interface_file.i

*如果是要让输出的java文件可以放进package里那么要这样写:

swig -c++ -java -package interface_file.i

3. g++ -fpic -c x.cpp y.cpp x_wrap.cpp

*这条语句可能出现以下错误:

1).error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.

这个错误的解决方法是在g++后面加上-std=c++11

2). fatal error: jni_md.h: No such file or directory(或者jni.h)

这个错误说明g++编译器没有找到这个头文件,所以我们需要手动把这个(这个两个文件)的具体为止告诉g++。

找文件的方法是:先找到jdk的位置,比如/usr/lib/jdk/jdk1.8.0_171,然后里面有include文件夹。jni.h在这个include文件夹,jni_md.h在include/linux下。

然后我们需要显示的告诉g++,方法是在g++后面加上-I 关键字。

下面命令是对应我电脑的解决以上两个问题的整体命令:

g++ -std=c++11 -I /usr/lib/jvm/java-8-openjdk-amd64/include -I /usr/lib/jvm/java-8-openjdk-amd64/include/linux/ -fpic -c LocMsg.cxx LocMsgPublisher.cxx LocMsgPubSubTypes.cxx LocMsgSubscriber.cxx interface_wrap.cxx 其中cxx文件依据自己项目改变。

4. g++ -shared x.o y.o x_warp.o -o libOutput.so

生成so文件,生成之后把该文件移动到/usr/lib中

如果需要链接其他第三方动态库的话,需要在上面这条命令中加入-l,加几个动态库就写几个。更多关于链接库的基本知识可以参考这篇博客:https://blog.csdn.net/surgewong/article/details/39236707

比如:g++ -shared LocMsg.o LocMsgPubSubTypes.o LocMsgPublisher.o LocMsgSubscriber.o interface_wrap.o -lfastcdr -lfastrtps -o libLocMsg.so 其中fastcdr和fastrtps为名为libfastcdr.so和libfastrtps.so的动态库。

5. javac x.java

如果出现有的类型无法转换的情况,比如 incompatible types: String cannot be converted to SWIGTYPE_p_std__string,需要在interface.i中加入:

%include "std_string.i"

6. java x

### 回答1: SWIG是一个用于连接C/C++和其他编程语言的工具。它提供了一种简单的方式,可以通过自动生成中间代码来实现C/C++的功能与其他编程语言(如Java)之间的交互。 通过SWIG,我们可以将C代码换为Java代码,并在Java中调用C库中的函数。这样做的好处是可以利用C/C++的高性能、底层控制和已有的库文件,并在Java使用这些功能。 要将C代码换为Java代码,我们需要这样做的步骤: 1. 创建一个SWIG接口文件,以描述C函数的输入和输出类型。这个接口文件使用SWIG定义的特定语法。 2. 使用SWIG运行器,将接口文件作为输入,并生成一个Java包含C函数的Java接口文件。 3. 创建Java代码,以断开连接的方式调用生成的Java接口文件中的C函数。 SWIG通过将C代码封装在JNI(Java Native Interface)调用中来实现C与Java的交互。这允许Java代码直接调用C代码,并从C代码中返回结果。 使用SWIG进行C到Java换可以使开发人员更加方便地利用两种语言的优点,提高开发效率和性能。SWIG还支持其他编程语言,如Python、Ruby和Perl,使C代码更容易与这些语言进行交互。 总之,SWIG是一个非常有用的工具,可以帮助在C/C++Java之间实现无缝的交互,为开发人员提供了更多的灵活性和选择,并最大程度地利用现有的代码和库文件。 ### 回答2: Swig是一个开源工具,用于将C/C++代码换为支持多种编程语言的代码,包括Java使用Swig可以很方便地将C代码换为Java代码。 换C代码为Java需经过以下步骤: 1. 安装Swig:首先需要安装Swig工具,可以从Swig官方网站下载并按照指示进行安装。 2. 编写接口文件:接口文件是一个后缀名为.i的文件,用于定义需要换的C代码和Java代码的映射关系。在接口文件中,需要指定需要换的C函数的签名以及导出到Java的类、方法、成员变量等。 3. 生成包装代码:使用Swig生成器来生成C和Java代码的包装代码。通过运行类似以下命令来生成包装代码: ``` swig -java your_interface.i ``` 4. 编译和构建:在生成的C代码中,使用Java Native Interface(JNI)来与Java代码进行交互。使用C/C++编译器将C代码编译为共享库(.so或.dll文件),以供Java程序调用。 5. 构建Java代码:创建Java项目,在项目中引入包装代码并实现调用。可以使用JNI函数调用C函数,或直接使用包装代码生成的Java类和方法进行调用。 需要注意的是,换C代码到Java并不是一种直接的换过程,可能存在一些依赖问题,对于一些复杂的C代码或使用了C特定功能的代码,还需要在Java代码中添加适当的兼容性处理。 总结而言,Swig是一个强大的工具,可以将C代码换为Java代码,简化了C/C++Java之间的交互过程,提高了代码的可维护性和可扩展性。 ### 回答3: SWIG(Simplified Wrapper and Interface Generator)是一个用于将C/C++代码换为其他语言的工具。如果想要将C代码换为Java代码,可以使用SWIG来完成。 首先,在使用SWIG之前,需要确保已经安装好了SWIG,并且配置好了相关的环境变量。 接下来,需要创建一个包含C代码的接口文件,该文件的后缀名通常为.i。在接口文件中,需要使用SWIG的语法来指定要换的C函数和类型。 然后,使用SWIG命令对接口文件进行处理,以生成Java代码。命令的语法通常为:swig -java interfacefile.i 完成上述操作后,会生成一系列的Java文件,包括接口文件中指定的函数和类型Java封装类。 最后,可以将生成的Java代码导入到你的项目中,并与其它Java代码一起进行编译和运行。 需要注意的是,SWIG并非完美的工具,可能会有一些限制和问题。在使用SWIG进行CJava时,可能会遇到一些类型对应的困难,或者在C和Java之间的内存管理方面的差异。因此,在使用SWIG换代码时,需要谨慎处理这些问题,并进行相应的修改和调试。 总之,通过使用SWIG,我们可以方便地将C代码换为Java代码,从而能够在Java平台上使用C语言的功能和库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值