背景:
在建图的工作空间mapping中,编译好了GeographphicLib-2.3之后,对工作空间mapping进行编译,报错,找不到下面这俩。
总结:
原因:因为GeographphicLib的库文件在编译的时候没有放到默认系统目录usr/local下,而是放到了/tmp下,所以位于GeographphicLib-2.3/cmake下的FindGeographicLib.cmake文件找不到库文件了。
解决办法:
重新编译
并在cmake步骤,设置 -DCMAKE_INSTALL_PREFIX=/usr/local
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
编译建图工作空间
报错:找不到库文件
我实际上已经按照常规流程下载、解压、编译并安装了 GeographicLib-2.3
。操作如下:
我 /usr/local/lib/cmake/路径下没有GeographicLib,更没有GeographicLibConfig.cmake 或 geographiclib-config.cmake 文件。
我在/home/wk/文档/1项目代码资料/sjtu/3月18建图和规划/mapping/src/GeographicLib-2.3/cmake下找到了FindGeographicLib.cmake文件。
重新 sudo make install 可以发现
GeographicLib
已经成功地通过 sudo make install
命令进行了安装。但是,它仍然被安装到了 /tmp/geographic
目录下,这是一个临时目录,通常用于存放临时文件,系统重启后可能会被清理。因此,这不是一个适合长期存储库文件的位置。
sudo make install
[sudo] wk 的密码:
Making install in src
make[1]: 进入目录“/home/wk/文档/1项目代码资料/sjtu/3月18建图和规划/mapping/src/GeographicLib-2.3/BUILD/src”
make[2]: 进入目录“/home/wk/文档/1项目代码资料/sjtu/3月18建图和规划/mapping/src/GeographicLib-2.3/BUILD/src”
/usr/bin/mkdir -p '/tmp/geographic/lib'
/bin/bash ../libtool --mode=install /usr/bin/install -c libGeographicLib.la '/tmp/geographic/lib'
libtool: install: /usr/bin/install -c .libs/libGeographicLib.so.26.0.0 /tmp/geographic/lib/libGeographicLib.so.26.0.0
libtool: install: (cd /tmp/geographic/lib && { ln -s -f libGeographicLib.so.26.0.0 libGeographicLib.so.26 || { rm -f libGeographicLib.so.26 && ln -s libGeographicLib.so.26.0.0 libGeographicLib.so.26; }; })
libtool: install: (cd /tmp/geographic/lib && { ln -s -f libGeographicLib.so.26.0.0 libGeographicLib.so || { rm -f libGeographicLib.so && ln -s libGeographicLib.so.26.0.0 libGeographicLib.so; }; })
下面很重要
重新配置 GeographicLib
: 回到 GeographicLib-2.3
目录下,删除旧的 BUILD
或 build
目录,然后重新运行 cmake
配置命令,并指定合适的 CMAKE_INSTALL_PREFIX
。例如:
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
-DCMAKE_INSTALL_PREFIX=/usr/local
是一个常见的选项,用来指定 GeographicLib
库和其他相关文件的安装路径。
这个路径通常代表系统的本地软件目录,对于大多数 Linux 发行版来说,/usr/local
是用户自定义安装软件的标准位置。
使用这个选项时,make install
命令将会把库文件、头文件、工具、手册页等安装到 /usr/local
下对应的子目录中:
- 库文件会被安装到
/usr/local/lib
- 头文件会被安装到
/usr/local/include
- 手册页会被安装到
/usr/local/share/man
- 其他资源(如配置文件、数据文件等)会被安装到
/usr/local/share/<package>
或/usr/local/etc
使用 -DCMAKE_INSTALL_PREFIX=/usr/local 的好处包括:
-
遵循系统标准: 将第三方库安装到
/usr/local
符合 Linux 系统的约定,使得其他程序和包管理器更容易发现和处理这些库。同时,系统清理工具(如apt-get autoremove
)通常不会触及/usr/local
下的内容,确保了用户自行安装的软件不会被意外删除。 -
环境变量和链接器路径: 现代 Linux 系统通常会自动包含
/usr/local/lib
和/usr/local/include
在默认的库搜索路径 (LD_LIBRARY_PATH
和C_INCLUDE_PATH
) 以及编译器搜索路径 (CPATH
和CPLUS_INCLUDE_PATH
) 中。这意味着在许多情况下,您无需手动设置环境变量或在项目CMakeLists.txt
中指定额外的链接和包含目录。 -
易于维护和升级: 当您需要更新或卸载
GeographicLib
时,只需重新编译安装到同一位置即可覆盖旧版本。如果您将来需要卸载,由于所有文件都集中在一个已知的位置,清理工作会更加简单。