如何安装Google RE2并解决C++项目链接错误问题
问题根源
你遇到的链接错误是因为RE2编译时依赖的Abseil库,与你通过CMake安装的Abseil在编译配置(如C++标准、ABI版本)上不匹配,或是链接时未完整引入RE2所需的所有Abseil依赖库。
正确的安装流程
1. 安装Abseil(统一用CMake保证编译一致性)
cd ~/Desktop git clone https://github.com/abseil/abseil-cpp.git cd abseil-cpp mkdir build && cd build # 指定C++17标准,与RE2默认编译标准对齐 cmake .. -DCMAKE_CXX_STANDARD=17 -DCMAKE_INSTALL_PREFIX=/usr/local make -j$(nproc) sudo make install
2. 安装RE2(用CMake编译,自动关联Abseil)
放弃默认的make编译方式,改用CMake编译RE2,确保它能自动识别系统中的Abseil并保持配置一致:
cd ~/Desktop git clone https://code.googlesource.com/re2 cd re2 mkdir build && cd build cmake .. -DCMAKE_CXX_STANDARD=17 -DCMAKE_INSTALL_PREFIX=/usr/local make -j$(nproc) sudo make install
编译测试代码的正确方法
方法1:手动g++编译
优先用pkg-config自动获取链接参数(安装完成后一般会生成re2.pc文件):
# 检查re2.pc是否存在 ls /usr/local/lib/pkgconfig/re2.pc # 自动获取编译链接参数 g++ main.cpp -o main $(pkg-config --cflags --libs re2)
如果没有pkg-config配置文件,手动指定所有依赖的Abseil库:
g++ main.cpp -o main -lre2 -labsl_base -labsl_raw_logging_internal -labsl_log_severity -labsl_strings -labsl_cord -labsl_bad_optional_access -labsl_throw_delegate
方法2:CMake编译(推荐)
创建CMakeLists.txt,让CMake自动处理依赖关联:
cmake_minimum_required(VERSION 3.14) project(re2_test) set(CMAKE_CXX_STANDARD 17) # 查找RE2和Abseil库 find_package(RE2 REQUIRED) find_package(absl REQUIRED) add_executable(main main.cpp) # 链接所需库 target_link_libraries(main PRIVATE RE2::re2 absl::base absl::raw_logging_internal absl::strings)
执行编译:
mkdir build && cd build cmake .. make ./main
验证结果
运行编译后的程序,应输出1,表示正则匹配成功。
内容的提问来源于stack exchange,提问作者Shahaboddin
相关产品推荐
相关产品推荐

