编译PCL1.6.0源码时链接出错

这两天按照点击打开链接所描述的一步一步的做,最后在构建ALL_BUILD项目时,报以下错误:

libboost_thread-vc100-mt-gd-1_50.lib(thread.obj) : error LNK2019: external symbol "public: static class boost::chrono::time_point<class boost::chrono::system_clock,class boost::chrono::duration<__int64,class boost::ratio<1,10000000> > > __cdecl boost::chrono::system_clock::now(void)" (?now@system_clock@chrono@boost@@SA?AV?$time_point@Vsystem_clock@chrono@boost@@V?$duration@_JV?$ratio@$00$0JIJGIA@@boost@@@23@@23@XZ)not resolved in function "public: bool __thiscall boost::thread::try_join_until(class boost::chrono::time_point<class boost::chrono::system_clock,class boost::chrono::duration<__int64,class boost::ratio<1,1000000000> > > const &)" (?try_join_until@thread@boost@@QAE_NABV?$time_point@Vsystem_clock@chrono@boost@@V?$duration@_JV?$ratio@$00$0DLJKMKAA@@boost@@@23@@chrono@2@@Z) 
3>C:\PCL\bin\pcl_octree_debug.dll : fatal error LNK1120: 1 external not risolved

起初以为是Boost库的问题,按理说Boost1.50.0的版本相对于AllINOne里的Boost版本是要高些的,不应该出现这种问题,没办法只好google一下,google的大部分结果基本上是在http://www.pcl-users.org论坛里的帖子,并且没有人做出解答。而http://dev.pointclouds.org/issues/741里也有这种问题,然而一时半会也没看明白,这时只好回归到报错信息本身上,报错信息意思是thread.obj中引用了boost::chrono有关内容,然而boost::chrono却并没有实现,因此需要额外添加相关库文件。将对应工程链接的库文件与PCL1.7.1链接的库文件对比,终于发现要添加链接库文件是boost_chrono-vc100-mt-gd-1_50.lib,然而整个解决方案里的工程实在是太多了,一个一个添加相当费时!这时http://dev.pointclouds.org/issues/741里面提醒了我,要将cmake/pcl_find_boost.cmake文件里的

# Required boost modules
find_package(Boost 1.40.0 REQUIRED COMPONENTS system filesystem thread date_time iostreams)
修改为

# Required boost modules
find_package(Boost 1.40.0 REQUIRED COMPONENTS system filesystem thread date_time iostreams chrono)

后来编译PCL1.7.1时,发现已经解决该问题了,其cmake/pcl_find_boost.cmake文件中相应内容为

# Required boost modules
set(BOOST_REQUIRED_MODULES system filesystem thread date_time iostreams)
# Starting with Boost 1.50, boost_thread depends on chrono. As this is not
# taken care of automatically on Windows, we add an explicit dependency as a
# workaround.
if(WIN32 AND Boost_VERSION VERSION_GREATER "104900")
  set(BOOST_REQUIRED_MODULES ${BOOST_REQUIRED_MODULES} chrono)
endif(WIN32 AND Boost_VERSION VERSION_GREATER "104900")


之后重新cmake整个源代码,然后BuildAll,就一路顺畅,编译链接通过。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值