使用 DESTDIR 标志进行 make install 后,.la 文件中的 dependency_libs 错误

使用 DESTDIR 标志进行 make install 后,.la 文件中的 dependency_libs 错误

我正在维护一个本地编译的版本GPG。最终结果应该是独立的软件包套件/opt/local(该基本目录下有标准树:usr/bin用于二进制文件、usr/lib用于库等)。

作为安装过程的一部分,我

  • libgpg-error在临时目录中配置、编译和安装
LDFLAGS="-L/opt/local/usr/lib" CFLAGS="-I/opt/local/usr/include" ./configure --prefix=/usr

MAKEFLAGS="-j4" DESTDIR=~/Downloads/tmp/libgpg-error make install
  • 从该目录中创建一个 Slackware 包并将其安装到/opt/local,从而得到上面提到的目录树结构,其中包含 中的可执行文件/opt/local/bin等。

  • 与以前一样,在临时目录中进行配置、编译和安装libgcrypt,这次考虑到它依赖于以前安装的libgpg-error(因此传递给了额外的选项./configure):

LDFLAGS="-L/opt/local/usr/lib" CFLAGS="-I/opt/local/usr/include" ./configure --prefix=/usr --with-libgpg-error-prefix=/opt/local/usr

MAKEFLAGS="-j4" DESTDIR=~/Downloads/tmp/libgcrypt make install

由于libgcrypt取决于libgpg-errormake install前者的步骤会产生一个.la文件

~/Downloads/tmp/libgcrypt/usr/lib/libgcrypt.la

包含以下依赖行:

# Libraries that this one depends upon.
dependency_libs=' -L/opt/local/usr/lib /usr/lib/libgpg-error.la'

问题:

现在,当我编译并尝试安装时ntbtls,它知道上述两个软件包,它

  • /opt/local/usr/lib/libgcrypt.la
  • 看到对的依赖/usr/lib/libgpg-error.la,并且
  • 尝试读取不存在的文件,导致错误。

dependency_libs如果我将该行更改为,则一切都会顺利进行

# Libraries that this one depends upon.
dependency_libs=' -L/opt/local/usr/lib /opt/local/usr/lib/libgpg-error.la'

我已经手动执行了该操作(好吧,通过一个小脚本),但一定有某种方法可以通过传递给 的选项来解决这个问题./configure。我认为其中一个原因是,在libgcrypt源目录中,运行make install命令后,我同时拥有

  • 一个.lai文件(注意i),其内容如上(错误的依赖关系),并被传输到结果.la文件中DESTDIR
  • 一个.la包含dependency_libs我想要的行的文件:
diff <source_dir>/src/.libs/libgcrypt.la <source_dir>/src/.libs/libgcrypt.lai

返回

20c20
< dependency_libs=' -L/opt/local/usr/lib /opt/local/usr/lib/libgpg-error.la'
---
> dependency_libs=' -L/opt/local/usr/lib /usr/lib/libgpg-error.la'
31c31
< installed=no
---
> installed=yes

我不熟悉的内部工作原理libtool,也不知道为什么/opt/local在安装过程中的某个地方丢失了,导致两个文件(.lavs .lai)之间有这种区别。

我还没找到很多对文件的讨论.lai,更不用说关于它们如何或何时生成的更深奥的话题了,但我希望了解这个过程,希望以某种方式破解它以达到这个特定的目的。

我尝试过的:

更改--prefix--libdir标志并不是很好的选择,因为它们会导致安装的软件包的目录结构混乱/opt/local

答案1

为了达到我认为你所描述的最终结果,我所知道的唯一可以产生它的方法就是将你的依赖项复制到/opt/local(与跳频) 并将源代码复制到临时构建目录中,之后您可以 chroot 进入/opt/local并使用 运行configure脚本--prefix=""

不过,回顾一下 FHS,我相信如果您找到一种方法来使构建的输出适合--prefix=/usr/local您的目的,您的困难就会大大减少。

相关内容