具有同一库的冲突标头版本的依赖项
Dependencies with conflicting header versions of the same library
我编译了一个使用tensorflow C api的简单程序,所以我将其链接到c_api.h
标头和libtensorflow.so
。它可以很好地编译并链接到program
。
当我用ldd program
检查可执行文件的库依赖项时,我得到了直接依赖项及其位置:
linux-vdso.so.1 (0x00007ffc5bf4e000)
libtensorflow_framework.so.1 => /home/myuser/libtensorflow/lib/libtensorflow_framework.so.1 (0x00007fd35d341000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fd35f34a000)
(...other libraries...)
但是,当我运行该程序时,我收到此处描述的相同错误:
[libprotobuf FATAL external/protobuf/src/google/protobuf/stubs/common.cc:78]
This program was compiled against version 2.6.1 of the Protocol Buffer runtime library, which is not compatible with the installed version (3.1.0).
Contact the program author for an update.
If you compiled the program yourself, make sure that your headers are from the same version of Protocol Buffers as your link-time library.
libprotobuf
不在可执行文件的直接依赖项列表中,因此我假设它是一个子依赖项(即链接的库之一的依赖项(。
我的理解是,库dependency-that-uses-protobuf.so
是使用libprotobuf.so.2.6.1
文件编译的,而我的编译器使用了同一库但版本 3.1.0 的标头。这是对的吗?
如果是这样,我怎么能告诉链接器使用该特定库版本的标头而不是其他版本(使用 CMAKE(进行编译,从而防止运行时错误并获取链接器错误。(?)
我的困惑是因为到目前为止我只指定了作为可执行文件直接依赖项的链接库,所以我不知道如何(以及我是否应该(链接作为子依赖项的库。
我的解决方法是指定具有兼容 protobuf 版本的不同 OpenCV 路径:
# Finds installed opencv with incompatible Protobuff
# find_package( OpenCV REQUIRED )
# Finds the opencv with compatible Protobuf in my system
find_package( OpenCV REQUIRED PATHS /usr/local NO_DEFAULT_PATH)
解释
opencv 库和 tensorflow 库都是用静态链接到libprotobuf
编译的,因此它们不会ldd
命令一起显示。但是编译时仍然需要标头,并且两者都具有冲突的标头版本。
相关文章:
- 如何从C++中的依赖类型中获得它所依赖的类型
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 导入库可以跨dll版本工作吗
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 将依赖名称显式标记为类型名和模板的奇怪之处
- 在clang++预处理器中确定gcc工具链版本
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 不同的Visual Studio版本中缺少.dll
- C++GTKMM gui循环依赖关系
- 如何在 CMake 3.7 及更高版本中表达 PGO 依赖项
- 我如何才能弄清楚库的特定版本为什么在依赖项中
- 发布版本依赖于MFC中的调试dll
- 如何在Visual Studio中构建具有不同依赖关系版本的多个产品
- 令人费解的Boost.Python 1.54(调试版本)对Windows上的Python27.lib的依赖关系
- DLL 依赖项版本冲突
- 更新依赖于 Boost 库的库的 Boost 版本,而无需重新链接
- C++两个库依赖于相同的库,但版本不同
- 有没有一种方法可以让本机npm包依赖于特定版本的v8C++API