文章目录
- 1、fatal error : sw/redis++/redis.h
- 2、fatal error: dwarf.h: No such file or directory
- 3、fatal error: elfutils/libdw.h: No such file or directory
- 4、fatal error: libunwind.h: No such file or directory
- 5、fatal error: google/protobuf/port_def.inc
- 6、error adding symbols: DSO missing from command line
- 7、undefined reference to `timer_settime'
- 8、fmt error: type_identity_t、basic_format_args
1、fatal error : sw/redis++/redis.h
需安装Redis C++ 相关环境。
git 搜索 hiredis、redis-plus-plus 源码,并执行如下命令:
unzip hiredis.zip -d ./ && cd hiredis && make -j12 && make install && cd .. && unzip redis-plus-plus.zip -d ./ && cd redis-plus-plus && \
mkdir build && cd build && cmake .. && make -j12 && make install
2、fatal error: dwarf.h: No such file or directory
处理方案:
sudo apt install libdwarf-dev
安装后,由于安装目录为: ./libdwarf/dwarf.h
CMakeList.txt 中Include:
3、fatal error: elfutils/libdw.h: No such file or directory
sudo apt-get install libdw-dev
如果还是不行,再执行如下:
sudo apt-get update
sudo apt-get install libelf1
4、fatal error: libunwind.h: No such file or directory
sudo apt-get install libunwind-dev
5、fatal error: google/protobuf/port_def.inc
原因:Protobuf 路径在CMakeList中未正确配置
分别尝试不同颜色框中的方式:
6、error adding symbols: DSO missing from command line
原因: target_link_libraries 未连接正确
请检查 CMakeList.txt 中的 target_link_libraries
7、undefined reference to `timer_settime’
处理方案:增加 rt 连接库即可。
target_link_libraries(sample rt )
8、fmt error: type_identity_t、basic_format_args
原因:spdlog 未找到自身目录下的fmt头文件,而是找到了系统目录下的头文件
解决方案:
(1)使用spdlog源码,编译到工程中;
(2)确保使用spdlog的代码,只在.cpp 中包含 spdlog 的头文件,在.h文件中,使用前置定义的方式,以减少头文件之间的关联依赖,确保被外部调用时,不依赖spdlog相关.h:
例如:
a.h 中:
namespace spdlog
{
class logger;
}
class A
{
public:
A();
private:
std::shared_ptr<spdlog::logger> logger_main_;
};
a.cpp 中:
#include "spdlog/spdlog.h"
#include "spdlog/sinks/rotating_file_sink.h" // support for rotating file logging
A::A()
{
=
auto sink_main = std::make_shared<spdlog::sinks::rotating_file_sink_mt>(log_path + "main.txt", 1024 * 1024 * 4, 10);
sink_main->set_level(log_level_temp);
spdlog::sinks_init_list sink_main_list = { sink_main };
logger_main_ = std::make_shared<spdlog::logger>("main", sink_main_list.begin(), sink_main_list.end());
logger_main_->set_level(log_level_temp);
logger_main_->flush_on(log_level_temp);//Note:
logger_main_->info(" hi you ");
}