【问题标题】:Linking a specific shared object链接特定的共享对象
【发布时间】:2018-10-18 18:25:23
【问题描述】:

我正在使用 cmake,我试图找到如何链接到特定的共享对象。例如,libva-wayland 有 2 个共享对象 libva-wayland.solibva-wayland.so.1。在这种情况下,指定库会自动创建对后者的依赖。

即使在CMakeLists.txt 中明确指定文件target_link_libraries(${PROJECT_NAME} usr/lib/x86_64-linux-gnu/libva-x11.so...,它仍然链接到usr/lib/x86_64-linux-gnu/libva-x11.so.1

我正在验证具体内容,以便使用 ldd 链接我的二进制文件

我意识到我们希望保留这样指定的链接,因为您想确保它使用正确的版本,但我想部署在使用 libva 版本 2.xx 的不同系统上,并且依赖于 1 .xx 导致它无法在该系统上运行。

这可以实现吗?我猜我可能需要对 ldconfig 进行一些更改?

谢谢

【问题讨论】:

  • 尝试使用库的绝对路径。
  • @arrowd 我曾尝试使用绝对路径,但不知何故,它仍然链接到不需要的符号链接。
  • 在您的“现已删除”question 上,回答是否有更智能、更推荐的方法的唯一方法是在您的代码上下文中。对于这样的问题,没有通用的答案。看起来您在这里已经足够了解通用的理论问题在这里不能很好地工作。它们需要几十页才能涵盖所有可能的排列。显示您的代码、获得答案然后在需要时向后续 cmets 询问其他情况会更好。

标签: cmake linker shared-libraries


【解决方案1】:

我想在使用 libva 2.x.x 版本的不同系统上进行部署,而对 1.x.x 的依赖导致它无法在该系统上运行。

这是设计

希望您的程序链接到 1.x 版本的库不会在 2.x 系统上启动,因为这些库具有不同的 ABI。如果允许这个程序运行,它可能会崩溃。

了解外部库版本控制here

TL;DR:如果您希望您的程序在基于 2.x 的系统上运行,您必须针对 2.x 本身的头文件和库构建它。 没有办法构建一个可以同时在1.x2.x 上运行的可执行文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多