1.源码地址
https://github.com/eProsima/RPC
2.准备工作:
我的安装环境是ubuntu20.04,可能需要安装的软件。可以等到编译时报错再安装。如果已经安装了就忽略。
cmake
g++
git
libasio-dev
libtinyxml2-dev
libssl-dev
libp11-dev
libengine-pkcs11-openssl
openjdk-8-jdk
libpython3-dev
libboost-all-dev
gradle
备注:
试验机已经安装了git和g++,根据报错信息,我自己安装的如下:
$sudo apt install cmake
$sudo apt install libboost-all-dev
$sudo apt install libasio-dev
$sudo apt install libtinyxml2-dev
$sudo apt install openjdk-8-jre-headless
$sudo apt install openjdk-8-jdk
3.编译
按网站上的README描述的顺序编译。
先在~下创建目录RPC
cd ~
mkdir RPC //路径根据需要可以自己改
1).boost_threadpool
$cd ~/RPC
$git clone https://github.com/eProsima/boost_threadpool.git
$cd boost_threadpool
//linux 系统下需要切换成cmake分支,否则找不到cmake文件
git branch -r
git checkout -b cmake origin/cmake
$mkdir build && cd build
$cmake -DCMAKE_INSTALL_PREFIX=~/RPC/install ..
$cmake --build . --target install
2).foonathan_memory_vendor
$cd ~/RPC
$git clone https://github.com/eProsima/foonathan_memory_vendor.git
$cd foonathan_memory_vendor
$mkdir build && cd build
$cmake -DCMAKE_INSTALL_PREFIX=~/RPC/install ..
$cmake --build . --target install
3).Fast CDR
$cd ~/RPC
$git clone https://github.com/eProsima/Fast-CDR.git
$cd Fast-CDR
$mkdir build && cd build
$cmake -DCMAKE_INSTALL_PREFIX=~/RPC/install ..
$cmake --build . --target install
4).Fast DDS
$cd ~/RPC
$git clone https://github.com/eProsima/Fast-DDS.git
$cd Fast-DDS
$mkdir build && cd build
$cmake -DNO_TLS=ON -DCMAKE_INSTALL_PREFIX=~/RPC/install ..
$cmake --build . --target install
$cd ~/RPC
$git clone https://github.com/eProsima/Fast-DDS-Gen.git
$cd Fast-DDS-Gen
$./gradlew assemble //网上说执行这句可以不用安装gradle,第一次运行需要下载文件,比较慢安装时最新的版本编译错误,切换到2023.1.9的提交,可以编译通过。
$git checkout 4848e9a0df59c611d871424e155576f9e441a6fe
$ ./gradlew assemble //下面为输出
> Task :submodulesUpdate
子模组路径 'thirdparty/idl-parser':检出 'de671e1e6f48ea3db7c833812fd345e7d91a1d42'
BUILD SUCCESSFUL in 2s
6 actionable tasks: 3 executed, 3 up-to-date
若不起作用,安装gradle,运行$gradle assemble
$cd ~/RPC/install/bin
$cp ~/RPC/Fast-DDS-Gen/scripts/fastddsgen .
$cd ~/RPC/install/share
$cp ~/RPC/Fast-DDS-Gen/share/fastddsgen . -r
5).RPC
$cd ~/RPC
$git clone https://github.com/eProsima/RPC.git
$cd RPC
//编译RPC是需要修改CMakeLists.txt, 下面的OFF -> ON
option(BUILD_JAVA "Activate the compilation of the Java application" ON)
安装gradle(我用的是4.4.1,具体步骤可参考网络,成功后能在命令行运行gradle命令)
$mkdir build && cd build
$cmake -DRPCPROTO=rpcdds -DCMAKE_INSTALL_PREFIX=~/RPC/install ..
$cmake --build . --target install //有时编译失败是网络原因,再试几次即可
3.环境变量
install路径需要设置到环境变量中。
在~/.bashrc中,设置
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/XXX/RPC/install/lib
export RPCDDSHOME=/home/XXX/RPC/install
export RPCDDS=/home/XXX/RPC/install/bin
export PATH=$PATH:$RPCDDS:$RPCDDSHOME
4. 生成文件:
在/home/XXX/RPC/install/bin目录,执行
$rpcddsgen -help
按照帮助说明生成文件,输入文件是idl格式的。例如:
$../../install/bin/rpcddsgen -example x64Linux2.6gcc4.4.5 Test.idl
Test.idl内容如下:
interface HelloWorld
{
string hello(in string name, out long index);
};
生成的文件默认与idl文件在同一个路径,可以通过-d选项指定路径。-example表示生成的文件里含有示例。生成的文件列表像下面这样:
├── makefile_x64Linux2.6gcc4.4.5
├── TestAsyncCallbackHandlers.h
├── TestClientExample.cxx //客户端使用示例
├── Test.cxx
├── TestDDSAsyncSupport.cxx
├── TestDDSAsyncSupport.h
├── TestDDSProtocol.cxx
├── TestDDSProtocol.h
├── Test.h
├── Test.idl
├── TestProtocol.h
├── TestProxy.cxx
├── TestProxy.h
├── TestServer.cxx
├── TestServerExample.cxx //服务端使用示例
├── TestServer.h
├── TestServerImplExample.cxx //函数是实现在这里修改
├── TestServerImplExample.h
├── TestServerImpl.h
├── TestTopics.cxx
├── TestTopics.h
├── TestTopicsPlugin.cxx
└── TestTopicsPlugin.h
通过make -f makefile_x64Linux2.6gcc4.4.5来执行make。
如果不想要示例,可以去掉option选项,直接输入:
$../../install/bin/rpcddsgen Test.idl
生成的文件如下:
├── TestAsyncCallbackHandlers.h
├── Test.cxx
├── TestDDSAsyncSupport.cxx
├── TestDDSAsyncSupport.h
├── TestDDSProtocol.cxx
├── TestDDSProtocol.h
├── Test.h
├── Test.idl
├── TestProtocol.h
├── TestProxy.cxx
├── TestProxy.h
├── TestServer.cxx
├── TestServer.h
├── TestServerImpl.h
├── TestTopics.cxx
├── TestTopics.h
├── TestTopicsPlugin.cxx
└── TestTopicsPlugin.h
注意:idl里面需要有interface,否则生成的文件会少很多且用处不大。
生成后执行报错:
$./rpcddsgen
java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)
ERROR: Getting platforms. null
删除生成文件重新编译安装