如何让Meson仅链接符号链接而非实际库文件?
让Meson链接库的符号链接而非实际文件的方法
默认情况下,Meson的find_library会自动解析符号链接到实际的库文件,导致生成的可执行文件依赖具体版本的库(比如libname.so.1.2.3),在其他版本的库环境中运行会报错。要让Meson直接链接符号链接libname.so,可以用以下几种方法:
方法1:直接指定符号链接文件查找
通过find_library的name参数指定具体的符号链接文件名,同时限定查找目录,避免Meson解析到实际文件:
libname = meson.get_compiler('cpp').find_library('', dirs : '/usr/lib', name : 'libname.so')
方法2:直接用link_with链接符号链接文件
跳过find_library的自动解析逻辑,直接构造符号链接的文件对象并链接:
libname_so = files('/usr/lib/libname.so') executable('myapp', 'main.cpp', link_with : libname_so)
方法3:调整find_library的查找偏好
显式指定只查找共享库,并禁用静态库优先,让Meson优先选取不带版本号的符号链接(此方法依赖系统库查找顺序,稳定性略逊于前两种):
libname = meson.get_compiler('cpp').find_library('name', static : false, prefer_static : false)
采用上述方法后,生成的可执行文件的动态依赖会指向libname.so,而非具体版本的库文件。当目标机器上存在对应版本的libname.so符号链接(指向其本地的实际库)时,程序就能正常加载运行,避免出现"can't find libname.so.1.2.3"的错误。
内容的提问来源于stack exchange,提问作者CIsForCookies
相关产品推荐
相关产品推荐

