GDAL ,PROJ,GEOS,PROTOBUF安装

GDAL源码  gdal-3.0.2.tar.gz 下载:https://gdal.org/download.html#current-releases

依赖于PROJ6

1.proj6安装

安装依赖:yum install sqlite-devel


下载源码    proj-6.2.1.tar.gz
tar and cd
mkdir build
cd build/
cmake ..             cmake 命令需要互联网环境,要联网下载
                     #如果要在内网部署,在互联网cmake之后,把buuild这个文件夹复制到内网。
                     #内外网的~/build/目录和cmake的目录都要保持一致。即路径保持一致才可以。
cmake --build .
ctest
cd ..
./configure
make
make install

cmake 需要互联网,比较麻烦,在内网的话,直接这样就可以了:
./configure
make
make install

ldconfig
proj --version
ln -sv /usr/local/include/proj/ /usr/include/proj   # 不一定需要这一步

2.GDAL安装

# 因为系统有多个proj(上面安装了新的proj),如果不添加proj的安装路径,
# ./configure会报错:error: PROJ 6 symbols not found

./configure --with-proj=/usr/local/
make
make install
ldconfig
gdalinfo --version


安装完毕,又安装proj-4(覆盖了proj-6),如何影响gdal的功能?

3.GEOS安装


tar -jxvf ***.tar.bz2
./configure
make
make install

4.protobuf安装

https://github.com/protocolbuffers/protobuf/releases
源码下载:protobuf-all-4.0.0-rc-1.tar.gz
依赖:yum install autoconf automake libtool curl make g++ unzip

./configure
make 
make install

ldconfig


源码安装存在问题,直接下载rpm包来安装
http://rpmfind.net/linux/rpm2html/search.php?query=protobuf-c&submit=Search+...&system=&arch=
分别下载:
protobuf     //安装高版本的,依赖libstdc++.so.6(GLIBCXX_3.4.20)(64bit),那么需要安装gcc_9.2
protobuf-compiler
protobuf-c
安装了gcc_9.2也报上面错误

最后直接yum安装成功
yum install protobuf protobuf-c protobuf-devel protobuf-c-devel

 

<think>好的,我现在需要解决用户在编译C++项目时遇到的错误:“fatal error: memory: No such file or directory”,这个错误出现在proj/common.hpp文件中。用户提到了引用了两个来源,可能与PX4Firmware中的代码和文件状态测试有关,但可能主要是缺少头文件的问题。 首先,我得确定这个错误的具体原因。通常,当编译器提示找不到头文件时,可能有几个原因: 1. **头文件确实不存在于系统中**:例如,用户可能没有安装包含该头文件的库或者没有正确配置路径。 2. **头文件路径未被包含在编译命令中**:即编译器在搜索路径中找不到该头文件,需要手动指定包含目录。 3. **编译器版本不支持**:例如,某些C++标准库的头文件在不同版本中的位置或名称可能不同,比如C++11之后的一些变化。 用户提到的memory头文件是C++标准库的一部分,通常位于<memory>,应该由编译器提供。所以首先需要确认用户是否正确安装了C++编译器及其标准库。如果用户使用的是较旧的编译器版本,可能不支持某些C++11或更高版本的功能,但<memory>是一个比较基础的头文件,所以更可能的是路径问题或者编译器配置问题。 接下来,用户可能是在项目中包含了某个需要<memory>头文件的代码,比如使用了智能指针(如std::shared_ptr或std::unique_ptr),这些定义在<memory>中。如果代码中确实有相关使用,但未包含头文件,或者包含方式有问题,就会导致这个错误。 解决方案可能包括: - 检查代码中是否有正确的#include <memory>语句。 - 确认编译器是否支持C++11或更高版本,因为智能指针在C++11中引入。如果用户代码中使用了C++11特性,需要在编译命令中添加-std=c++11或更高版本。 - 检查编译器的包含路径是否正确配置,确保标准库的路径被正确包含。 另外,用户提到的引用[1]中的PX4Firmware可能与项目中的某些依赖库有关,如果项目依赖PX4Firmware或其他外部库,可能需要确保这些库已正确安装,并且它们的头文件路径被包含在编译选项中。例如,使用-I选项指定外部库的头文件目录。 引用[2]中的文件状态测试可能与当前问题关系不大,但可能是用户在其他地方遇到的问题。不过这里可以暂时忽略,专注于解决头文件缺失的问题。 可能的解决步骤: 1. 在common.hpp文件中添加#include <memory>语句。 2. 确保编译器版本足够新,支持所需的C++标准。 3. 在编译命令中添加必要的标准版本标志,如-std=c++11。 4. 检查项目的依赖库是否正确安装,并在编译时包含相关路径。 需要进一步确认用户的代码中是否确实缺少了#include <memory>,或者是否存在其他配置问题。如果用户的环境配置有误,比如交叉编译时未正确设置系统头文件路径,也可能导致此类错误。此外,检查文件系统权限,确保头文件所在目录可读,但通常标准库的目录权限不会有问题。</think>### 解决方案:编译错误 `fatal error: memory: No such file or directory` #### 1. **确认代码中是否包含头文件** - 在 `common.hpp` 或其他相关文件中,确保已添加以下语句: ```cpp #include <memory> // 引入智能指针、内存管理工具 ``` - 若代码使用了 `std::shared_ptr`、`std::unique_ptr` 等特性,必须包含此头文件[^1]。 #### 2. **检查编译器版本及C++标准** - `<memory>` 是C++标准库的一部分,需确认编译器支持 **C++11或更高版本**。 - 在编译命令中添加标准版本标识(例如GCC/Clang): ```bash g++ -std=c++11 your_file.cpp -o output # 指定C++11标准 ``` #### 3. **验证编译器环境配置** - 确保编译器的标准库路径正确。可通过以下命令检查: ```bash echo | g++ -v -x c++ -E - # 查看GCC包含路径 ``` - 若路径异常(如交叉编译环境配置错误),需重新安装编译器或修复路径。 #### 4. **检查依赖库路径** - 如果项目依赖外部库(如PX4Firmware),确保其头文件路径已添加到编译命令中: ```bash g++ -I/path/to/PX4Firmware/include -std=c++11 your_file.cpp -o output ``` - 使用 `-I` 参数指定外部头文件目录。 #### 5. **排查文件系统权限** - 确认标准库头文件所在目录(如 `/usr/include/c++/11`)可读: ```bash ls -l /usr/include/c++/11/memory # 检查文件是否存在及权限 ``` - 若权限不足,需修复权限或重装编译器。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值