modbus交叉编译

目的:在ubuntu16.04上,对modbus进行交叉编译,使编译完成后的文件放在项目文件夹中后,项目通过交叉编译可以实现在arm板上运行。

步骤:
一:
下载
libmodbus-3.1.4.tar.gz

下载地址:官方下载

然后将该文件复制到虚拟机ubuntu系统中,解压缩(tar xzvf libmodbus-3.1.4.tar.gz)。

然后进入解压后的文件夹,运行 ./autogen.sh 生成 configure 脚本。
这一步我这里报错:
./autogen.sh: 2:./autogen.sh : autoreconf:not found
Running autoreconf failed
解决方法:

sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool

再次执行 ./autogen.sh 就可以成功。

然后在该目录下进行编译

./configure --host=aarch64-linux-gnu --prefix=/home/hu/libmodbus-master-linux

aarch64-linux-gnu 是我用的编译器,prefix后面跟的是编译生成文件放置的目录。
执行后会出现确认信息,如果是对的就 make & make install;如果不对就重新设置。

完成后到刚才设置的目录下,就可以看到生成的文件。将其拷贝到相应的项目目录中进行编译。

编译报错,提示
undefined reference to `rpl_malloc’
网上说是因为交叉编译时autotools认为我的工具链中不包含malloc,然后自作主张替换成了rpl_malloc。

我的解决办法是将libmodbus文件夹中的 configure 文件打开,从里面删除
$as_echo “#define malloc rpl_malloc” >>confdefs.h
这一行(这个文件中有很多字,我将它复制到了word中然后一个一个查找,找得很费劲,还好成功了)。然后把刚才生成的东西删了,重新从 ./configure 开始执行,再将它们拷贝到项目文件夹里面,再次编译,编译成功。

二:
下面的工作就是将编译好的可执行文件放到共享目录中,在Arm板上执行,这时又会出现一个主要问题。提示找不到动态链接库 libmodbus.so.5 。
根据我目前掌握的知识,这是由于Arm板上程序执行时,会自动去 /usr/bin 或 /bin 中(这两个里面我都拷贝了,具体是哪一个起了作用我也不知道)寻找动态链接库,如果程序用到了但这个目录下面没有就会报错。解决方法是将该文件通过nfs共享文件夹拷贝到相应的文件夹下,再次执行,最终成功。

你可能感兴趣的:(modbus交叉编译)