惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
博客园 - 叶小钗
The Cloudflare Blog
D
DataBreaches.Net
J
Java Code Geeks
G
Google Developers Blog
L
LangChain Blog
N
Netflix TechBlog - Medium
Stack Overflow Blog
Stack Overflow Blog
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
小众软件
小众软件
量子位
Apple Machine Learning Research
Apple Machine Learning Research
P
Proofpoint News Feed
博客园_首页
罗磊的独立博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog
腾讯CDC

博客园 - 一字千金

day6矩阵论---SVD(奇异值分解)lora关系 day5 线性代数--范数和内积 day4--特征值和特征向量 day3 向量 day2 线性代数--矩阵 day1线性代数---行列式 C++程序员大模型学习计划(每天2小时) 容器运行报错线程创建失败 linux C++崩溃堆栈信息打印 看懂成交密度,秒辨股市资金真假动向 安装android studio时出现下面报错source-36_r01.zip安装失败 异动拉升横盘突破筛选股票 sh看门狗脚本 QLabel设置QToolTip显示的样式 自动化http请求脚本 批量遍历文件夹内得文件生成md5值 g_JavaVM->AttachCurrentThread((void **) &pEnv, NULL))返回-1 python使用pg数据库 批量获取git所有分支命令 大模型之智能体 深⼊了解 GPT-4和ChatGPT的API 初识GPT-4和ChatGTP 什么是大模型以及需要掌握哪些基础知识 linux下检测程序内存泄漏方法步骤 pycharm2024下载安装一键激活2099年 linux根据进程名查找进程并杀死进程脚本 linux根据进程名称定时获取进程内存脚本 QGridLayout删除旧窗口还有清干净 linux编译安装ccache3.2.4
libprotobuf.so出现未定义符号
一字千金 · 2026-07-16 · via 博客园 - 一字千金

libprotobuf.so再gcc4.8.5环境编译,然后再高版本gcc环境编译连接这个libprotobuf.so,之后,出现未定义符号,因为

  • protobuf 用 GCC 4.8.5 编译 → 默认使用旧 C++ ABI(_GLIBCXX_USE_CXX11_ABI=0
  • libGitcJni.so 用 GCC 10.3.1 编译 → 默认使用新 C++ ABI(_GLIBCXX_USE_CXX11_ABI=1

GCC 5.1 开始默认启用了 C++11 ABI,导致 std::string 的符号名称不同。

所以编译libGitcJni时要加上add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)

makefilelist.txt文件如下

AUX_SOURCE_DIRECTORY(${PROJECT_SOURCE_DIR} SRC)

INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR})
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/jni)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/gitc)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/gitc/common_header)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/gitc/common_header/hva_header)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/gitc/lib_header)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# ===== 关键修改:强制使用旧 C++ ABI =====
#protobuf 用 GCC 4.8.5 编译 → 默认使用旧 C++ ABI(_GLIBCXX_USE_CXX11_ABI=0)
#libGitcJni.so 用 GCC 5.1 以上的编译 → 默认使用新 C++ ABI(_GLIBCXX_USE_CXX11_ABI=1)
#GCC 5.1 开始默认启用了 C++11 ABI,导致 std::string 的符号名称不同。编译会报错,所以强制设置参数_GLIBCXX_USE_CXX11_ABI
add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)

SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/bin $ORIGIN)

add_library(GitcJni SHARED ${SRC})

# 针对 GitcJni 目标单独设置 ABI(推荐方式)
target_compile_definitions(GitcJni PRIVATE _GLIBCXX_USE_CXX11_ABI=0)

TARGET_LINK_LIBRARIES(GitcJni safefunc HIK_GIR_MDL_CMP HIK_GITC_atlas300vpro protobuf)