我很困惑为什么 apt-get install 的行为方式不同,无论是从 Ubuntu(16.04)还是从 debian(stretch-slim docker 镜像)调用。
基本上,我执行:
root@ubuntu $ apt-get install libfcgi-dev
...
root@ubuntu $ dpkg -L libfcgi-dev
/.
/usr
/usr/lib
/usr/lib/libfcgi++.a
/usr/lib/libfcgi.a
/usr/share
/usr/share/doc
/usr/share/doc/libfcgi-dev
/usr/share/doc/libfcgi-dev/copyright
/usr/include
/usr/include/fastcgi.h
/usr/include/fcgi_config.h
/usr/include/fcgios.h
/usr/include/fcgio.h
/usr/include/fcgiapp.h
/usr/include/fcgi_stdio.h
/usr/include/fcgimisc.h
/usr/lib/libfcgi.so
/usr/lib/libfcgi++.so
/usr/share/doc/libfcgi-dev/changelog.Debian.gz
与容器相同:
root@container $ apt-get install libfcgi-dev
...
root@container $ dpkg -L libfcgi-dev
/.
/usr
/usr/include
/usr/include/fastcgi.h
/usr/include/fcgi_config.h
/usr/include/fcgi_stdio.h
/usr/include/fcgiapp.h
/usr/include/fcgimisc.h
/usr/include/fcgio.h
/usr/include/fcgios.h
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libfcgi++.a
/usr/lib/x86_64-linux-gnu/libfcgi.a
/usr/share
/usr/share/doc
/usr/share/doc/libfcgi-dev
/usr/share/doc/libfcgi-dev/changelog.Debian.amd64.gz
/usr/share/doc/libfcgi-dev/changelog.Debian.gz
/usr/share/doc/libfcgi-dev/copyright
/usr/lib/x86_64-linux-gnu/libfcgi++.so
/usr/lib/x86_64-linux-gnu/libfcgi.so
我认为该软件包决定了它将被安装在哪里(根据[这篇文章][1]),并且看起来 apt-install 确实在 debian 下添加了“x86_64-linux-gnu”
这很烦人,因为我必须在 debian 上执行一个巨大的构建,其中所有库路径都是硬编码的,没有“/x86_64-linux-gnu”部分
有人有关于如何解决这个问题并执行构建而不将所有 x86_64-linux-gnu/* 硬链接到 /usr/lib 或重写 make 文件的提示吗?
答案1
这不会apt
改变路径。Ubuntu 16.04 软件包是使用“旧”路径构建的,Debian 9 软件包是使用多架构路径构建的(请参阅8.4 版包装的变更日志)。
您根本不需要对路径进行硬编码,编译器知道在哪里可以找到这些库。