我正在使用cmake,并且试图找到如何链接到特定的共享库。例如,libva-wayland有2个共享对象libva-wayland.so
和libva-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进行一些更改?
谢谢
答案 0 :(得分:0)
我想在使用libva 2.x.x版本的其他系统上进行部署,并且对1.x.x的依赖性导致它无法在该系统上工作。
这是设计完成的。
希望您与库的1.x
版本链接的程序不能在2.x
系统上启动,因为这些库具有不同的ABI
。如果允许该程序运行,则可能会崩溃。
了解外部库版本here。
TL; DR:如果希望您的程序在基于2.x
的系统上运行,则必须针对本身是2.x
的标头和库来构建程序。 没有办法来构建可以在1.x
和2.x
上运行的单个可执行文件。