链接特定的共享对象

时间:2018-10-18 18:25:24

标签: cmake linker shared-libraries

我正在使用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进行一些更改?

谢谢

1 个答案:

答案 0 :(得分:0)

  

我想在使用libva 2.x.x版本的其他系统上进行部署,并且对1.x.x的依赖性导致它无法在该系统上工作。

这是设计完成的。

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

了解外部库版本here

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