关于最近tensorflow去除内部abseil-cpp的一些link问题

对官方tensorflow-1.15.5做了移除abseil-cpp之后,发现一些link问题,程序虽然编译和链接时,都没有问题,但是打的RPM包之后,程序运行时,会hang住。

本地正常运行也没有问题,主要体现在最后link的参数上:

 -Wl,-z -Wl,relro -Wl,-z -Wl,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld

如果一旦链接上-specs=/usr/lib/rpm/redhat/redhat-hardened-ld,就表现不正常,此问题已经在红帽子官网报告过。当前笔者使用的是CentOS8,和fedora23相当,所以此处bug仅记录。

解决办法也比较简单,spec文件中加入自定义ldflags即可:

%define build_ldflags  %{nil}

这里为不加。

本着寻根究底的精神,确认link过程中有问题,于是,查询去掉一部分link,发现并不会hang住,罪魁祸首是opennmt-tokenizer,其依赖了sentencepiece,而sentencepiece代码中依赖了protobuf和absl,在0.1.96版本中,由于SPM_USE_EXTERNAL_ABSL写反了(BUG),导致使用了thirdparty目录下的protobuf的源文件和abseil的源文件加入其中一起编译,从而导致了符号冲突。

BTW:二进制运行时提示:

[libprotobuf ERROR google/protobuf/descriptor_database.cc:641] File already exists in database: tensorflow/core/profiler/tfprof_log.proto

有几种情况:

(1)tensorflow的C库和C++库一起链接导致;

(2)其它protobuf的版本内置导致,如(abseil)

Monthly Archives

Pages

Powered by Movable Type 7.9.4

About this Entry

This page contains a single entry by Cnangel published on November 4, 2022 1:51 PM.

[转]c++使用宏检测类是否包含某个函数或者变量属性 was the previous entry in this blog.

Fedora37 发布了 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.