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月啊,大难不死,必有后福,现在先努力不死吧!

相关推荐
阆遤4 天前
llama.cpp 0.4.0-dev 本地编译指南
ai·编译·llama.cpp
程序猿阿森4 天前
C语言预处理完全指南:宏定义、条件编译与头文件规范,一篇搞懂工程化编程
c语言·c++·编译
Akir.weiwen9 天前
⑤ 消费格式差异:同一份契约的四角色消费格式
人工智能·编译·设计规范·语义
泛联新安9 天前
FPGA功能仿真:VShark正式亮相,换仿真器不用换习惯
fpga开发·编译·仿真·嵌入式软件·代码漏洞扫描
Akir.weiwen19 天前
③ 约束显化:把隐含的语义假设变成显式规则
人工智能·编译·设计规范·语义
深念Y22 天前
Makefile vs go run:Go 项目构建方式对比
java·开发语言·golang·k8s·编译·流水线·cicd
淡海水24 天前
04-02-哈希-Dictionary-TKey-TValue-上-核心数据结构
数据结构·算法·c#·哈希算法·编译·字典·dictionary
淡海水25 天前
03-05-线性-Array-List-LinkedList与Span-所有权与成本模型选型
c#·list·编译·array·clr·机器码
淡海水1 个月前
03-03-线性-LinkedList-T-源码不变式与选择边界
windows·链表·c#·编译·linkedlist·clr·机器码
深念Y1 个月前
SSD 寿命洁癖:编译过程不入盘的原则与实践
缓存·io·内存·编译·ssd·读取·写入