
我很困惑為什麼 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 版包裝的變更日誌)。
您根本不需要對路徑進行硬編碼,編譯器知道在哪裡可以找到這些函式庫。