安装及使用ceres遇到过的问题

首先ceres安装及使用需要两个依赖库glog与gflags,这两个库安装时需要注意要么只用apt install要么只用源码编译安装,如果两个都装了用apt purge或者在/usr/local/lib及/usr/local/include/下删除所有的glog、libglog*、gflags、libgflgs*文件以移除其中一个版本的安装。
注意如果从源码安装gflags应注意一个问题,因为默认使用源码的cmake编译出的gflags只开启静态库,当调用动态库时会报各种错误比如undefined glflags_shared之类的错误,正确开启方法应该是编译时开启动态链接库参数,然后才能被外部引用。所以安装时应用
cmake -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DINSTALL_HEADERS=ON -DINSTALL_SHARED_LIBS=ON -DINSTALL_STATIC_LIBS=ON -DGFLAGS_NAMESPACE=google -G”Unix Makefiles”..
再执行

make
sudo make install

如果只想用动态链接库,可以用

cmake  -DBUILD_SHARED_LIBS=ON -DGFLAGS_NAMESPACE=google -G”Unix Makefiles” ../ 

使用glog时,曾遇到logging.cc is being linked both statically and dynamically into this executable的问题,问题原因是静态链接库和动态链接库同时存在于/usr/local/lib中,解决方案是删除glog在usr/local下的所有文件,然后在glog安装源码的CMakeLists.txt中将
add_library (glog
${GLOG_SRCS}
)
改成
add_library (glog SHARED
${GLOG_SRCS}
)
然后终端
export CXXFLAGS="-fPIC"
cmake …
make
sudo make install
完成glog重新安装即可解决这个问题

你可能感兴趣的:(工程编程问题)