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

相关推荐
『昊纸』℃5 小时前
Mac上编译C语言的简易方法
c语言·mac·教程·xcode·编译
北风朝向2 天前
Lombok 参数名丢失?只需启用-parameters编译选项即可完美解决
编译·参数·parameters
REDcker6 天前
跨平台编译详解 工具链配置与工程化实践
linux·c++·windows·macos·c·跨平台·编译
a83331969 天前
Windows下C语言编译指南
编译··庞大
代码中介商11 天前
手把手教你Linux 打包压缩与 gcc 编译详解
linux·运维·服务器·编译·打包·压缩
庞轩px13 天前
第三篇:泛型深度解析——类型擦除与通配符的奥秘
java·编译·泛型·类型擦除
九英里路17 天前
OS学习之路——动静态库制作与原理
linux·学习·操作系统·unix·进程·编译·动静态库
CoderMeijun18 天前
CMake 入门笔记
c++·笔记·编译·cmake·构建工具
fengshi217219 天前
GCC PGO中gcda文件的作用解析
编译
fengshi217219 天前
PGO实战:从源码到性能飞跃
编译