写在前面
笔者的运行环境
一、问题描述
编译程序时
/usr/bin/ld: /usr/lib/libceres.so.1.14.0: undefined reference to `google::kLogSiteUninitialized'
collect2: error: ld returned 1 exit status`
二、解决方法
出现这个问题的原因是glog
版本不对的问题。新版本的glog
移除了变量google::kLogSiteUninitialized
.
解决方法一(自己的解决方法)
修改CMakeLists.txt
中对于的配置,设置优先查找 glog 的目标位置:
原来的CMakeLists.txt
set(GFLAGS_PREFER_EXPORTED_GFLAGS_CMAKE_CONFIGURATION TRUE)
set(GLOG_PREFER_EXPORTED_GLOG_CMAKE_CONFIGURATION TRUE)
修改为:
set(GFLAGS_PREFER_EXPORTED_GFLAGS_CMAKE_CONFIGURATION FALSE)
set(GLOG_PREFER_EXPORTED_GLOG_CMAKE_CONFIGURATION FALSE)
解决方法二
更换glog
版本:
(这里的指令是来自 参考链接[2])
卸载掉系统中原来安装的glog,然后安装旧版本的glog,这里安装的版本是v0.5.0-rc2
:
git clone https://github.com/google/glog.git
cd glog/
git checkout v0.5.0-rc2
mkdir build && cd build
cmake ..
sudo make -j12 install
参考链接
[1] shaoxh. undefine reference to google::kLogSiteUninitialized #178 [EB/OL]. https://github.com/MIT-SPARK/Kimera-VIO/issues/178, 2021-10-14/2023-01-14.
[2] rancheng. undefined reference to `google::kLogSiteUninitialized’ with cmake #543 [EB/OL]. https://github.com/google/glog/issues/543, 2021-04-20/2023-01-14.