我正在维护一个本地编译的版本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-error
,make 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
在安装过程中的某个地方丢失了,导致两个文件(.la
vs .lai
)之间有这种区别。
我还没找到很多对文件的讨论.lai
,更不用说关于它们如何或何时生成的更深奥的话题了,但我希望了解这个过程,希望以某种方式破解它以达到这个特定的目的。
我尝试过的:
更改--prefix
或--libdir
标志并不是很好的选择,因为它们会导致安装的软件包的目录结构混乱/opt/local
。
答案1
为了达到我认为你所描述的最终结果,我所知道的唯一可以产生它的方法就是将你的依赖项复制到/opt/local
(与跳频) 并将源代码复制到临时构建目录中,之后您可以 chroot 进入/opt/local
并使用 运行configure
脚本--prefix=""
。
不过,回顾一下 FHS,我相信如果您找到一种方法来使构建的输出适合--prefix=/usr/local
您的目的,您的困难就会大大减少。