如何在配置/构建(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 加载器/微调器)