如何编写 Makefile 来打包将安装所有必需链接的 .so 动态库

如何编写 Makefile 来打包将安装所有必需链接的 .so 动态库

我需要帮助来编写一个 Makefile,以便在 Linux FHS 上安装我的库。https://www.debian.org/doc/debian-policy/ch-sharedlibs.html#s-sharedlibs-dev说应该有一个从.so到 的链接和一个从到到 的.so.$(version).$(minor)链接。下面是我的 Makefile 的片段.so.$(version).so.so.$(version).$(minor)

install -D ${CND_ARTIFACT_PATH_${CONF}} $(DESTDIR)/usr/lib/${CND_ARTIFACT_NAME_${CONF}}.$(version).0.0
ln -s $(DESTDIR)/usr/lib/${CND_ARTIFACT_NAME_${CONF}}.$(version).0.0 $(DESTDIR)/usr/lib/${CND_ARTIFACT_NAME_${CONF}}
ln -s $(DESTDIR)/usr/lib/${CND_ARTIFACT_NAME_${CONF}}.$(version).0.0 $(DESTDIR)/usr/lib/${CND_ARTIFACT_NAME_${CONF}}.$(version)

打包dpkg-buildpackage -rfakeroot -b并安装软件包后,创建的软链接指向用于构建软件包的实际 .so,而不是指向安装的 .so/usr/lib/

gowtham@VBUbu:~$ ls -la /usr/lib/libbase.so.1*
lrwxrwxrwx 1 root root     67 Aug 25 00:35 /usr/lib/libbase.so.1 -> /home/gowtham/Packages/base-1.0/debian/tmp/usr/lib/libbase.so.1.0.0
-rw-r--r-- 1 root root 170588 Aug 25 00:35 /usr/lib/libbase.so.1.0.0

答案1

对于我在系统上可以找到的库的符号链接,这些链接都是相对的,而不是绝对的:

lrwxrwxrwx 1 root root       14 Aug  9 03:52 libwine.so -> libwine.so.1.0
lrwxrwxrwx 1 root root       14 Aug  9 03:52 libwine.so.1 -> libwine.so.1.0

因此,看起来 Makefile 应该cd对库文件夹执行操作并创建相对符号链接:

cd $(DESTDIR)/usr/lib
ln -s ${CND_ARTIFACT_NAME_${CONF}}.$(version).0.0 ${CND_ARTIFACT_NAME_${CONF}}
ln -s ${CND_ARTIFACT_NAME_${CONF}}.$(version).0.0 ${CND_ARTIFACT_NAME_${CONF}}.$(version)
cd -

相关内容