absl编译使用踩坑

        系统是ubuntu18.04,刚接触cartographer,这两天在编译工程,就你报错多!!!

坑1:can not be used when making a shared object; recompile with -fPIC

     这个是由于在进行源码编译的时候,没有打开POSITION_INDEPENDENT_CODE选项所致。

 附:我的源码编译步骤如下:

git clone github地址
git checkout 对应版本
cd abseil-cpp
mkdir build 
cd build

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_CXX_STANDARD=11 ..

make 
sudo make install

坑2:未定义的引用

        发现cartographer官方源文件编译过了,但是写的另外的工程依赖cartographer时编译却不成功(别的小伙伴都编译过了,很费解。。。)

报错如下:

看报错是库文件没有链接到,看了看源码添加absl库的形式,于是添加下面这几行:

find_package(absl REQUIRED)

set(absl_LIBRARIES
absl::algorithm
absl::base
absl::debugging
absl::flat_hash_map
absl::memory
absl::meta
absl::numeric
absl::str_format
absl::strings
absl::synchronization
absl::time
absl::utility)


target_link_libraries(节点或库名
    ${absl_LIBRARIES})

emmmm......于是就这样编译过了

坑3:前两天为了标定传感器数据,升级了cmake ,发现编译工程出现如下报错

 absl::hash_internal::MixingHashState .... (and so on )

        很奇怪的报错,之前编译的时候也没遇到这个问题,遂查之,然并卵。。。

        于是重新用新版本的cmake 编译安装abseil库,好了。。。。

        其实中间还下了新版本的abseil库编译安装,还是很多报错,看来cartographer的各种依赖库版本对应关系还是十分重要啊...

        注:今天编译的时候又遇到了这个问题,而且是因为我们的工程代码并没有直接用cartographer编译,而是先把修改的源码单独编译好了后再把头文件等等拷贝进入ros包中进行调用,emmmm....把编译过的源码重新替换一下ros中旧的依赖项就好了...

坑4 :error while loading shared libraries: libabsl_city.so.0

            同样是用了升级后的cmake,这回是编译过了,但是真正跑程序的时候出现这个报错。

解决方案:在/etc/ld.so.conf中加入/usr/local/lib这一行,保存之后,再运行:/sbin/ldconfig -v 更新一下配置即可。

具体讲解参考:Linux中error while loading shared libraries错误解决办法_齐天大圣~~的博客-CSDN博客_error while

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值