提问人:patrik 提问时间:10/6/2023 最后编辑:patrik 更新时间:10/9/2023 访问量:69
如何在介子中对特定库进行静态链接?
How to do static linking of a specific library in meson?
问:
我正在尝试构建从 Github 下载的 glib。但是,库 libpcre2 是动态链接的
epatrek@seliiuts03047[12:12][babeltrace/glib/glib-2.76.5]$ ldd _build/glib/libglib-2.0.so.0
linux-vdso.so.1 => (0x00007ffd79111000)
librt.so.1 => /lib64/librt.so.1 (0x00007f3402e28000)
libpcre2-8.so.0 => /proj/wcdmaiov/epatrek/babeltrace/glib/pcre2-10.42-bin/lib/libpcre2-8.so.0 (0x00007f3402bb0000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f3402993000)
libc.so.6 => /lib64/libc.so.6 (0x00007f3402617000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3403373000)
我想静态链接它,同时保持所有其他依赖项的动态性。我尝试过一些没有成功的事情(在传统开发人员的草率中注释出错误的行),
meson setup --prefix /proj/wcdmaiov/epatrek/babeltrace/glib/glib-2.76.5-install _build
#env LDFLAGS="-Wl,-Bstatic -llibpcre2-8.a" meson setup --prefix /proj/wcdmaiov/epatrek/babeltrace/glib/glib-2.76.5-install _build
#meson setup --prefix /proj/wcdmaiov/epatrek/babeltrace/glib/glib-2.76.5-install _build -Dlibpcre:libtype=static
#meson setup --prefer-static --prefix /proj/wcdmaiov/epatrek/babeltrace/glib/glib-2.76.5-install _build
meson compile -C _build
meson install -C _build
但是所有方法要么导致构建失败,要么没有达到我的预期。例如,--prefer-static 试图将所有库链接为静态库(我认为这是正确的,但不是我想做的),这会导致 libc 和其他未使用 -fPIC 编译的库出现一些问题。
有人知道这是怎么做到的吗?如果可能的话,我想避免修补 meson.build。
巴西 帕特里克
答:
1赞
ptomato
10/8/2023
#1
查看 meson.build 部分以查找 pcre2。如果 pcre2 在系统中找到它,它看起来会动态链接,如果它被构建为 Meson 子项目,则静态链接。我认为您可以强制使用带有 .meson setup --force-fallback-for libpcre2-8
评论
0赞
patrik
10/9/2023
这并没有像我所希望的那样有效。我们在我工作的服务器上有一些防火墙,阻止了开放的互联网访问。我能够分别下载 pcre2 和介子构建补丁并添加到子项目/包缓存中。但是,它仍然是动态链接的。这来自 ldd 命令:libpcre2-8.so.0 => /proj/wcdmaiov/epatrek/babeltrace/glib/glib-2.76.5/_build/glib/。/subprojects/pcre2-10.42/libpcre2-8.so.0 中。我还尝试修改 glib meson.build 以添加 ,但这也没有真正帮助。use_pcre2_static_flag = true
1赞
patrik
10/9/2023
我又看了一眼,似乎 2.76.5 缺少该选项。添加这个,它就像一个魅力。非常感谢您的帮助!根据您的解释(显然还有您推荐的选项中的一些挖掘),我还设法了解有关介子的更多信息,这本身就很有用。default_options: ['default_library=static']
评论