torcharrow gflags版本问题

问题描述

其实仍然是很简单的编译问题,但是又弄了一整个下午加几乎整个晚上,进度缓慢,又吸取了教训,因而还是来记录一下。

在试图使用torcharrow进行推荐系统模拟的时候,撰写的python程序报错:ERROR: flag 'flagfile' was defined more than once。这是一个符号重复定义的问题,似乎在python编程中非常常见。

总结一下问题解决的步骤:

首先排查哪一句开始报错,一般是import就会报这个error,找到发现是自己写的一个pybind11的自用的共享库,其中使用了gflagsbrpc因而报错。

然后得分析原因,其实已经讲的很清楚了,符号重定义。所以无脑谷歌搜ai问都没卵用的。纯浪费时间,还得先想想。

原因是pip install torcharrow时,其实也他也打包了一个叫_torcharrow.xxx类似这个名字的pybind的共享库,里面的lib中也能看到两个libgflags.so.xxx这样的文件,因此如果同时import就重定义了符号,造成编译失败。具体torcharrow的结构可以通过pip show torcharrow去对应文件夹查看。

之前我的libflags是静态库,所以需要重新编译成动态库,而且需要让torcharrow和我的共享库使用同一个libgflags.so,如此动态链接时只需要加载一份.so,所以不会冲突,这就是动态库的好处。

然而这里一定注意两遍的libgflags的版本要一致,torcharrow2.2.2,这个库好像都停止维护了,应该一直都会是这个版本了,所以就本机编译安装相同的版本。然后通过进入对应condasite-package/torcharrow.libs/应该类似这样的文件夹,将其中一个libgflags.so.xxx通过软链接ln -s 改成你本机编译的那个.so,他似乎有好几个libgflags,你可以先去site-package/torcharrowldd查看他的pybind生成的动态库需要的是哪个libgflags,再去对应的地方软链接修改。

就大功告成了。

还是动脑太少,人工智能时代,仍然应该优先自己分析问题,试图解决。不行的话再求助。编译的理解仍然需要加强。

近期诸事不顺,眼睛花粉过敏,鼻子鼻窦炎又急性过敏性鼻炎,牙齿有一颗亟待根管,还有两颗牙龈发炎只能先靠布洛芬维持生计,下周才挂到口腔科的号。唉!命途多舛的 3 3 3月啊,大难不死,必有后福,现在先努力不死吧!

相关推荐
_OP_CHEN1 天前
【Linux系统编程】(二十八)深入 ELF 文件原理:从目标文件到程序加载的完整揭秘
linux·操作系统·编译·c/c++·目标文件·elf文件
devmoon3 天前
用Remix IDE在Polkadot Hub部署一个最基础的Solidity 合约(新手友好)
web3·区块链·智能合约·编译·remix·polkadot
春栀怡铃声5 天前
认识二叉树~
c语言·数据结构·经验分享·c·编译
creator_Li6 天前
gflags
gflags
小屁猪qAq13 天前
C++预处理过程详解
开发语言·c++·预处理·编译
星辰徐哥14 天前
Java程序的编译与运行机制
java·开发语言·编译·运行机制
小屁猪qAq15 天前
强符号和弱符号及应用场景
c++·弱符号·链接·编译
小屁猪qAq17 天前
从单例模式说动态链接
c++·单例模式·链接·编译
choumin1 个月前
在 Debian 上安装并运行 PoCL
linux·编译·安装·pocl
羑悻的小杀马特1 个月前
gflags+spdlog实战:C++命令行参数与高性能日志的极致搭配行动指南
c++·spdlog·gflags