如何在配置/构建(linux)期间微调二进制文件在哪里查找其共享库?

Posted

技术标签:

【中文标题】如何在配置/构建(linux)期间微调二进制文件在哪里查找其共享库?【英文标题】:How to fine-tune where a binary looks for its shared libraries during configure/build (linux)? 【发布时间】:2021-11-01 04:06:43 【问题描述】:

虽然我的问题与构建 Python 有关,但它可以被认为是通用的。我使用--with-tcltk-includes--with-tcltk-libs 构建了带有自定义TclTk 安装的Python。假设我将 /foo/bar/spam 路径传递给后者。问题是,当我使用strace 检查二进制文件在哪里查找其共享库时,我在搜索路径中看到了/foo/bar/spam,尽管我不希望这样,因为该应用程序将被交付,并且该路径在任何地方都不存在其他超出我自己的机器。所以我想在构建期间使用它,而不是作为生成的二进制文件的搜索路径。有什么想法吗?

【问题讨论】:

使用静态链接? 感谢您的回答!可能会这样做,是否可以使用LDFLAGS 静态链接特定库? 【参考方案1】:

静态链接可能是您最好的选择,因为您可能无法保证您的客户也将拥有任何其他必需的库(例如 sqlite3)。只是不要将标志--enable-shared 传递给./configure,它会默认构建一个静态链接的库。

不幸的是,我看不到使用标准选项构建部分静态/部分动态库的方法。这并不意味着不可能对Makefile 进行一些创造性的修补,但从概念上讲,我不确定它会如何工作。

【讨论】:

我同意你的总体方向,但是,虽然我还没有尝试过你的解决方案,但其他一些线程建议静态构建 Python 需要更多的工作(考虑检查这个 thread 和 @ 987654322@ Python wiki post on statically)。你怎么看? @luizbarcelos This 你链接的问题(哈哈),它的大部分答案来自 2009 年(一个来自 2015 年),我怀疑 Python wiki 条目也来自那个时代。从那以后,情况发生了很大变化。我刚刚在我的 Linux 服务器上下载了 3.9.7 源代码,运行 ./configure --prefix=$HOME && make 并生成了 python 二进制文件和 libpython3.9.a 静态链接库。不用大惊小怪,不用麻烦。也许我会在某个时候更新 Python wiki 页面...

以上是关于如何在配置/构建(linux)期间微调二进制文件在哪里查找其共享库?的主要内容,如果未能解决你的问题,请参考以下文章

在 asp.net 回发期间触发 javascript(以显示 css 加载器/微调器)

在 AngularJS 中的 $http 请求期间显示微调器 GIF?

如何在进行检查期间定位二进制文​​件?

文本二进制分类训练期间的波动损失

在构建管道期间覆盖发布配置文件的发布文件夹 (url)

使用 automake 配置脚本在 64 位 Linux 上构建 32 位?