Bootstrap

ubuntu 设置环境变量和程序调库路径

1.在原先的库路径上添加路径:

原先的链接库$LD_LIBRARY_PATH

查看库的路径:

echo $LD_LIBRARY_PATH

 设置库的路径,这里的设置在原来路径之上添加,可以看到保留了原来的$LD_LIBRARY_PATH

export LD_LIBRARY_PATH=/usr/local/robot/lib:/opt/ros/lib:$LD_LIBRARY_PATH

2.设置环境的目录:

echo $PATH
export PATH=/usr/local/robot/sbin:$PATH

3.如果出现库冲突的情况,即在多个目录下有同样的库名,则连接时会找错

通过上述两个的PATH和LD设置,也许能解决某个库的冲突,但是并不非常高效,这时解决方法:在cmake中 使用-Wl,-rpath参数

可以通过以下指令

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -w -Wl,-rpath=/usr/lib:usr/local/lib:/usr/lib/x86_64-linux-gnu")

在其中找到库的位置,即可实现对此程序的库查找。

4.如何查找指定的库:

问题如下:undefined symbol:通常就是库对不上

./Hello: symbol lookup error: ./Hello: undefined symbol: _ZN6google21kLogSiteUninitializedE

看这量的名字,有点像是glog的,因此就查找glog哪个版本中包含_ZN6google21kLogSiteUninitializedE 这个量,然后对应链接即可

(1)

 ldd Hello

找到当前运行时连接的glog 

  (2)

 locate glog 

/usr/lib/x86_64-linux-gnu/libglog.a
/usr/lib/x86_64-linux-gnu/libglog.so
/usr/lib/x86_64-linux-gnu/libglog.so.0
/usr/lib/x86_64-linux-gnu/libglog.so.0.0.0
/usr/lib/x86_64-linux-gnu/pkgconfig/libglog.pc
/usr/local/robot/lib/libglog.so
/usr/local/robot/lib/libglog.so.0

通过ldd可知程序运行链接的是robot下的glog,既然运行程序报error,说明robot下面的glog不包含_ZN6google21kLogSiteUninitializedE这个量,怀疑是在别的库包含这个量

nm -D /usr/lib/x86_64-linux-gnu/libglog.so | grep _ZN6google21kLogSiteUninitializedE

返回的结果为

000000000021e3b8 D _ZN6google21kLogSiteUninitializedE

说明应该链接 /usr/lib/x86_64-linux-gnu/libglog.so该库,

通过在cmakelists 文件中添加 -Wl,-rpath参数指定位置可解决该问题。

;