当前位置: 首页 > news >正文

abseil-cpp:环境搭建

参考: https://abseil.io/docs/cpp/quickstart-cmake

abseil-cpp.git/dd4c89b == abseil-cpp.git/20240722.1

1. clone代码仓库、编译


git clone https://github.com/abseil/abseil-cpp.git  /app/abseil-cpp/
#/app/abseil-cpp/.git/config
git checkout 20240722.1git rev-parse HEAD
#dd4c89bd657f1e247ce5111a5c89ffe6ccfd0c92cmake -S  /app/abseil-cpp  -B /app/abseil-cpp/build   -DABSL_BUILD_TESTING=OFF -DABSL_USE_GOOGLETEST_HEAD=ON -DCMAKE_CXX_STANDARD=14
cmake --build /app/abseil-cpp/build  --target all
ls /app/abseil-cpp/absl/strings/str_split.h

2. test.cpp

#include <string>
#include <vector>
#include "absl/strings/str_split.h"#include <stdio.h>
int main(int argc, char** argv){std::vector<std::string> v = absl::StrSplit("a,b,c", ',');
printf("v[0]=%s\n",v[0].c_str());return 0;
}

3. 编译运行

/app/llvm_release_home/clang+llvm-15.0.0-x86_64-linux-gnu-rhel-8.4/bin/clang++  -v   -L /app/abseil-cpp/build/absl/base/ -L /app/abseil-cpp/build/absl/strings/    -l absl_base  -l absl_raw_logging_internal -l absl_throw_delegate   -l absl_string_view   -l absl_strings_internal -l absl_strings      -I /app/abseil-cpp/   test.cpp  -o test.elf &&  ./test.elf

正常运行,并输出a

3A. 当少给 .a时 链接报错举例

/app/llvm_release_home/clang+llvm-15.0.0-x86_64-linux-gnu-rhel-8.4/bin/clang++  -v   -L /app/abseil-cpp/build/absl/base/ -L /app/abseil-cpp/build/absl/strings/ -L /app/abseil-cpp/build/absl/log/   -l absl_base  -l absl_log_internal_format -l absl_string_view   -l absl_strings_internal -l absl_strings      -I /app/abseil-cpp/   test.cpp  -o test.elf &&  ./test.elf

报错

"/usr/bin/ld" -pie -z relro --hash-style=gnu --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o test.elf /lib/x86_64-linux-gnu/Scrt1.o /lib/x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/12/crtbeginS.o -L/app/abseil-cpp/build/absl/base/ -L/app/abseil-cpp/build/absl/strings/ -L/app/abseil-cpp/build/absl/log/ -L/app/llvm_release_home/clang+llvm-15.0.0-x86_64-linux-gnu-rhel-8.4/bin/../lib/x86_64-unknown-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/12 -L/usr/lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/lib/../lib64 -L/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib64 -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/lib -L/lib -L/usr/lib -labsl_base -labsl_log_internal_format -labsl_string_view -labsl_strings_internal -labsl_strings /tmp/test-9d0c36.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/12/crtendS.o /lib/x86_64-linux-gnu/crtn.o
mold: error: undefined symbol: /app/abseil-cpp/build/absl/strings/libabsl_strings.a(str_split.cc.o): absl::lts_20240722::raw_log_internal::RawLog(absl::lts_20240722::LogSeverity, char const*, int, char const*, ...)
mold: error: undefined symbol: /app/abseil-cpp/build/absl/strings/libabsl_strings.a(str_split.cc.o): absl::lts_20240722::base_internal::ThrowStdOutOfRange(char const*)
clang-15: error: linker command failed with exit code 1 (use -v to see invocation)

3B. 报错探索并解决: nushell 在*.a中查找给定函数所在.a

nushell == /app5/nu-0.102.0-x86_64-unknown-linux-gnu/nu

3A报错缺少函数

  • absl::lts_20240722::raw_log_internal::RawLog
  • absl::lts_20240722::base_internal::ThrowStdOutOfRange

以下用nushell查找这些函数所在.a

/usr/bin/find  /app/abseil-cpp/build/absl/ -name "*.a"  |  lines|each  { |f|  nm --defined-only -C  $f } | str  contains   "absl::lts_20240722::base_internal::ThrowStdOutOfRange" | /usr/bin/grep true
# │  8 │ true  │/usr/bin/find  /app/abseil-cpp/build/absl/ -name "*.a"  |  lines|each  { |f|  $f }  | /usr/bin/grep  " 8 "
#│  8 │ /app/abseil-cpp/build/absl/base/libabsl_throw_delegate.a                           │/usr/bin/find  /app/abseil-cpp/build/absl/ -name "*.a"  |  lines|each  { |f|  nm --defined-only -C  $f } | str  contains   "absl::lts_20240722::raw_log_internal::RawLog" | /usr/bin/grep true
# │  4 │ true  │/usr/bin/find  /app/abseil-cpp/build/absl/ -name "*.a"  |  lines|each  { |f|  $f }  | /usr/bin/grep  " 4 "
# │  4 │ /app/abseil-cpp/build/absl/base/libabsl_raw_logging_internal.a                     │
http://www.lryc.cn/news/546264.html

相关文章:

  • Centos7部署k8s(单master节点安装)
  • RPA 职业前景:个人职场发展的 “新机遇”
  • 详解DeepSeek模型底层原理及和ChatGPT区别点
  • 《2025年软件测试工程师面试》JAVA基础面试题
  • 【算法学习之路】5.贪心算法
  • 如何打造一个安全稳定的海外社媒账号?
  • 【Python 数据结构 5.栈】
  • Qt开发⑪Qt网络+Qt音视频_使用实操
  • JavaEE--计算机是如何工作的
  • API接口:企业名称、注册号、统一社会信用代码、企业类型、成立日期和法定代表人等数据 API 接口使用指南
  • 微信小程序text组件decode属性的小问题
  • 【计算机网络入门】初学计算机网络(九)
  • LeetCode 974:和可被 K 整除的子数组
  • vector习题
  • 001-码云操作
  • 数据结构:二叉搜索树(排序树)
  • 【愚公系列】《Python网络爬虫从入门到精通》036-DataFrame日期数据处理
  • C++(蓝桥杯常考点)
  • 支付宝 IoT 设备入门宝典(下)设备经营篇
  • 蓝桥杯 之 填空题-位运算与循环
  • iOS逆向工程概述与学习路线图
  • DeepSeek 助力 Vue3 开发:打造丝滑的时间选择器(Time Picker)
  • 基于 Ingress-Nginx 实现 mTLS 双向认证
  • 学到什么记什么(25.3.3)
  • 【子网掩码计算器:Python + Tkinter 实现】
  • 《解锁HarmonyOS NEXT高阶玩法:艺术图像识别功能开发全攻略》
  • Spring Boot的启动流程
  • 【通俗讲解电子电路】——从零开始理解生活中的电路(三)
  • TypeScript系列01-类型系统全解析
  • ragflow-mysql 启动失败案例分析