LCM通信包在Windows 64位环境下的编译

 

首先,什么是LCM?

简而言之,是一个UDP传输方案。也就是在UDP外围做了一层封装,使得数据的传输变得比较的方便。

其次,一般在什么环境下用LCM?

在无人车系统中。而且操作系统多为linux,因此在linux编译这玩意据说有种水到渠成的感觉。

最后,为什么要在windows下来搞这套东西,而且又要在32搞定的情况下在64位上再搞一遍?

我不告诉你。

因为应用场景比较小众,估计这注定是一篇浏览量很悲剧的文章。然而哪怕只有一个人用到,这篇文章也有意义,因为网上的中文材料关于64位编译LCM这部分可以说是空白的,英文材料也很少,因此估计能帮你节省下少则一天,多则一月的时间。

废话就说到这,下面上流程:

参考网站:https://github.com/lcm-proj/lcm/issues/99(这个网页几乎包含能参考的所有信息,请无论如何先仔细看一遍)

安装python(64位版本)

地址:https://www.python.org/downloads/release/python-2715/

本人装的是2.7.15版本

装完之后添加环境变量

PYTHONPATH=C:\Python27;C:\Python27\Scripts;C:\Python27\Lib;C:\Python27\DLLs;C:\Python27\Lib\lib-tk;(注意这里是你安装Python的实际位置)

把PYTHONPATH环境变量添加到Path环境变量中,即

Path=%PYTHONPATH%

弄完之后可以在控制台输入python测试下是不是成功配置了。

到此关于Python相关的配置就完成了。

 

下载安装CMake

地址:https://cmake.org/download/

弄完后把bin文件夹也添加进环境变量Path中,也同样可以在控制台输入CMake测试下:

 

 

下载并安装MSYS2(小型GNU环境,为后面使用GCC编译glib2做平台性质的准备)

地址:http://www.msys2.org/

先换源(速度从龟速到正常),具体参考下面博客:https://blog.csdn.net/liyuanbhu/article/details/56496501

环境初始化,参考下面博客(本人感觉不做应该也可以,有勇士请验证下):

https://blog.csdn.net/yehuohan/article/details/52090282

因为后面就用到mingw-w64,因此直接安装mingw-w64的环境包

pacman -S mingw-w64-x86_64-toolchain

安装glib2

pacman -S glib2 glib2-devel mingw-w64-x86_64-glib2

 

下载LCM源码包,地址:https://github.com/lcm-proj/lcm

 

在github文件夹下载的源码包下新建一个叫做build的文件夹。

 

用管理员权限打开控制台然后cd到这里,输入下面的命令(本人要编译的是VS2017的64位版本,因此命令写为“Visual Studio 15 2017 Win64”,这里请做相应修改。另外,具体路径也要做修改)

cmake .. -G"Visual Studio 15 2017 Win64" -DCMAKE_BUILD_TYPE=Release -DLCM_ENABLE_TESTS=OFF -DCMAKE_INSTALL_PREFIX=../build -DGLIB2_GLIBCONFIG_INCLUDE_DIR="E:\lcm\msys64\mingw64\lib\glib-2.0\include" -DGLIB2_GLIB_INCLUDE_DIR="E:\lcm\msys64\mingw64\include\glib-2.0" -DGLIB2_GLIB_LIBRARY="E:\lcm\msys64\mingw64\lib\libglib-2.0.dll.a" -DGLIB2_GLIB_RUNTIME="E:\lcm\msys64\mingw64\bin\libglib-2.0.dll"

 

 

完成上面一步会在build文件夹下生成VS的文件,打开"lcm.sln",直接编译,发现出现了大量的错误。

可以发现都跟"mswsock.h"这个文件相关,看文件位置发现其是系统相关文件,不应该出错,因此猜测是头文件的相互包含出错。定位到包含该头文件的地方,发现只有“WinPorting.cpp”包含该文件。

相关程序段如下:

 

#define _WIN32_WINNT 0x0501
#include <Mswsock.h>
#include <stdio.h>
#include <winsock2.h>

修改为:

#define _WIN32_WINNT 0x0501
#include <winsock2.h>
#include <Mswsock.h>
#include <stdio.h>

再次编译,主体OK了。

残留问题如下:

 

 

因为是跟go相关的东西,没有用到,所以本人选择了无视,如果需要处理,下面这个文章能解决第一个问题,

https://blog.csdn.net/sinat_36053757/article/details/68487662?locationNum=3&fps=1

至于F_OK这个问题,参考网址如下:

https://blog.csdn.net/u012005313/article/details/50688257

就是在相应的位置把加上。

#define F_OK 0 

就可以了

 

完成编译之后,可以将工程里面的“lcm-example”设为启动项,然后把下面的dll扔进“liblcm-test”目录,然后运行即可看到结果

 


另外写文章累人,写代码掉头发,如果觉得文章有帮助,哈哈哈

 

 

  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值