Skip to Content

为何安装软件的时候总是提示缺少依赖关系呢?

安装了之后使用正常,但安装的时候为何总是提示缺少一大堆的依赖关系啊?怎么区分到底是不是真正缺少呢?
我用的是小芭比4.1,下载火狐来安装就提示缺少一大堆依赖,这些缺少提示是由什么来决定的呢?
#2298
labrador 的头像
Puppy包在被安装的过程中,系统会检测每一个新加入的可执行文件和.so文件(动态链接库)的依赖关系。如果某一个文件所依赖的动态链接库没有被找到,那么安装完成之后Puppy就会有警告。但很多时候这个警告并不准确,因为可能需要的.so文件虽然不在搜索路径中,但那个可执行文件知道去哪里找到这个.so。firefox就是这样一个例子,虽然有警告,但其实文件都是在的,也不影响firefox的使用。

个人认为这种机制不太合理,还是在制作包的时候把依赖关系弄得明确一点比较好。Puppy的包管理器非常原始,安装软件会有比较多的麻烦。不过也许从一开始Puppy也就不是被设计为那种需要经常安装更新软件的系统。
#2299
谢谢回答啊,我都不懂这些。
只是总看到这样的提示有些不放心啊,也不清楚软件安装后会不会有什么隐患。
像火狐这种正常软件,难道不可以让它不提示缺少?
既然软件都是正常可使用的了,提示又没啥用的?
应该可以让它不提示吧?
因为总是这样提示,也分不清楚竟然那个软件是正常的,那个是不正常的啊。
因为都不懂,所以问问,有空请解答下,谢谢了。
#2312
没办法去掉不正确的提示吗?
#2313
提示還是保留的好
如果要分辨哪個軟體執行是否完全正常
打開終端機執行它
如果有出現錯誤訊息, 例如找不到某個 .so
就代表 .so 路徑沒設好,
可以把 .so 所在目錄加到 /etc/ld.so.conf 中
再執行一下 ldconfig 讓它登錄到 /etc/ld.so.cache 即可
#2315
谢谢答复。学了一招。
不过我的意思是指,制作软件的作者应该有办法让正常使用的软件不出这样的提示才对?倒不是不喜欢这功能,而是这样正常的软件它又提示,不正常的又提示,像我这样的菜鸟有点无所适从。
#2316
打包的人已經夠辛苦了, 尤其在 puppy 下打包更是艱辛
資源不像 debian/ubuntu/fedora 下面豐富
有不圓滿處就包涵點吧
puppy8兄也可以幫忙加上安裝/移除腳本pinstall.sh/puninstall.sh
重新打包po上來服務網友們, 功德無量啊
想學腳本怎麼寫可以到 slackware 網站下載 .tgz
http://www.linuxpackages.net/
http://packages.slackware.it/
它的資源比 puppy 豐富
解開後, 裡面的 install/doinst.sh 就等於 .pet 包的 pinstall.sh
#2317
slackware的软件和是通用的吗?我倒是很有空,不过这些我都不懂,如果有详细的教程的话我可以帮忙。我时间有的是,但是不懂啊。如果你有时间教会我。我有空时倒可以弄弄,自己使用之后再分享上来当然没问题了。
#2318
首先要问的是:slackware软件是可以直接拿过来用的吗?如果是的话我慢慢弄明白它。
#2319
http://packages.slackware.it
这个网址,我搜索amule软件也没有?
#2320
slackware 跟 puppy 血緣很近
官網說 puppy 4.0 後 puppy 是重頭自己整個編譯過
不然以前直接借來就可使用, 所以才會有 tgz2pet 指令
其實現在我在編譯時需要的相依函數都是先借它的
借不到或不相容(通常都蠻相容的)
才考慮自己下載函數的源碼來編譯
不然有時碰到相依的東西裡面又有它的相依
每個都要自己動手編譯, 那可真的是...

slackware 資源沒 debian/ubuntu/fedora 豐富
找不到 amule是正常的
況且會選擇 slackware 的人, 很多都是喜歡自己編譯
有網友說他除了 libc 外, 其它的都是自己編譯來了
就得到最穩定, 最適合自己用的, 沒有多餘的贅肉的快速slackware
#2321
谢谢。我每天都有固定的时间上网和喜欢用linux系统,不过我可实在是个菜鸟啊,如果你有时间教会我相关打软件包的知识的话,我倒很愿意贡献自己的一分力量来和大家多分享。
不知道你有电子邮件可留下联系么?
#2326
来了一次又一次都没法看到有内容更新啊。
#2332
install/doinst.sh 就等於 .pet 包的 pinstall.sh
我用火狐重新打包了,不过没用,安装了还是有提示,只不过一样可以正常使用.
不明白啊,菜鸟有心无力.
#2335
別猴急, 總得測試無誤才好po上來, 不然誤人子弟怎辦
我這三腳貓功夫的幫剛出生的小貓咪喂喂"奶粉"還勝任愉快(開水自己想辦法)

就拿amule解說吧

0.
預備動作:
幫 puppy 佈置編譯環境:
官網下載編譯包(我這邊這個鏡像站比官方的快很多)
http://ftp.nluug.nl/ftp/pub/os/Linux/distr/puppylinux/sfs_modules-4/
目前是 puppy-1.4.2 就下載 devx_412.sfs
放到 /mnt/home/ 下面, 必須有儲存檔才會掛進來, 還沒有的重開機設一個吧
xxx_412.sfs 型式的開機後會自動掛上
"開始=>系統=>bootmanager啟動配置工具" 可以讓你掛載/卸載 .sfs 檔

1.
打開終端機, 先mkdir 一個工作目錄, 並進入
mkdir amule
cd amule
下載amule目前最新版源碼:
wget http://nchc.dl.sourceforge.net/sourceforge/amule/aMule-2.2.2.tar.bz2
解開:
tar jxvf aMule-2.2.2.tar.bz2
cd aMule-2.2.2
先看看有沒有INSTALL檔存在, 有就 less INSTALL 看一下編譯安裝說明
一般就三步驟搞定:
./configure
make
make install (puppy 這步要改成 new2pet make install)

2.
先幫編譯作配置:
./configure --help (可以看看這個程式有啥配置參數可用)
一般這樣下就可以了:
./configure --prefix=/usr (這個 prefix 代表軟體安裝路徑)
=>
checking for wx-config... no
configure: error:
wxWidgets must be installed on your system but wx-config
script couldn't be found. Please check that wx-config is
in path or specified by --with-wx-config=path flag, the
directory where wxWidgets libraries are installed (returned
by 'wx-config --libs' command) is in LD_LIBRARY_PATH or
equivalent variable and wxWidgets version is 2.8.0 or above.

發現少了 wx-config
先切回上層amule目錄
cd ..
http://packages.slackware.it/ 找看看
把尋找條件由package改成 file name 來找 wx-config
有12頁, 不好找, 改用軟體名稱wxWidgets找, 沒發現
改到 http://www.linuxpackages.net/ 用軟體名稱wxWidgets找
找到 wxwidgets-2.8.9-i486-1gds.tgz
下載到 amule 目錄後轉成 .pet
tgz2pet wxwidgets-2.8.9-i486-1gds.tgz
安裝
rox wxwidgets-2.8.9-i486-1gds.pet
發現少了兩個函數 libSDL-1.2.so.0 跟 libmspack.so.0
編譯時別裡它(下面說的執行時期少掉就要追下去補到完整)

3.
繼續編譯旅程:
cd aMule-2.2.2
./configure --prefix=/usr
=>
發現兩個問題, 第一個可有可無, 為了示範, 處置它吧:
checking for libupnp version >= 1.6.6... no (try to use --with-libupnp-prefix=PREFIX)
解=>
先切回上層 amule目錄
cd ..
slackware 沒找著libupnp, 直接下載源碼編譯:
wget http://nchc.dl.sourceforge.net/sourceforge/pupnp/libupnp-1.6.6.tar.bz2
tar jxvf libupnp-1.6.6.tar.bz2
cd libupnp-1.6.6
./configure --prefix=/usr (編譯的配置)
make (編譯)
new2dir make install (安裝並在上層目錄產生打包目錄)
最後一步(好像第5步)隨便按個字母鍵Enter, 會繼續用 dir2pet把上層打包目錄打包成.pet檔
切回上層 amule 目錄
cd ..
再安裝一次 .pet 檔, 方便移除
rox libupnp-1.6.6-i486.pet
很好, 相依都完整
這個 libupnp-1.6.6-i486.pet保管好, 常編譯收集多了就成自己的寶庫
cd aMule-2.2.2
./configure --prefix=/usr
很好, 第一個問題消失

4.
第二個是個error, 會停頓表示必須處置:
checking for crypto++ version >= 5.1... no
configure: error:
Could not find crypto++ header file "cryptlib.h".
Please try again with --with-crypto-prefix=/my_crypto_prefix
(replace /my_crypto_prefix with a valid path to your crypto++
installation directory).
解=>
slackware 沒找著, 改下載 ubuntu 的 .deb 包, 換個口味,
因為 puppy 的 xarchive 支援解開 .deb 包, 不過用slackware以外的比較冒險,
這裡只是示範 slackware找不到時, 又不想動手編譯(不好編譯時), 試試手氣
而ubuntu有不同時代的版本8.10, 8.04, 7.10 ... 就看你的手氣跟經驗囉
wget http://launchpadlibrarian.net/14207890/libcrypto%2B%2B-dev_5.5.2-2_i386.deb
下載到 amule 目錄
打開桌面的xarchive解開.deb檔, 建一個目錄 /root/amule/libcrypto++-dev 解開
繼續編譯之旅, 記得剛剛有題示可以用 --with-crypto-prefix 指定crypto++
所以就不安裝crypto++ ,如果沒提示, ./configure --help 找找, 有時寫在裏面
(如果寫軟體的太懶了沒提供, 就用 LD_LIBRARY_PATH 環境變數, 見第6項說明, 那裡有用到)
cd aMule-2.2.2
./configure --prefix=/usr --with-crypto-prefix=/root/amule/libcrypto++-dev/usr
很好, configure完成

5.
編譯
make
很好, 也沒error
安裝並打包
new2pet make install
這次最後一步(好像第5步)直接Enter跳出, 不繼續呼叫 dir2pet打包, 因為要修改選單
跳回上層 amule
cd ..
amule 是要放到"開始=>網際網路(互聯網)"的項目
先打開已經歸類到那裡的seamonkey看看怎麼寫
leafpad /usr/share/applications/SeaMonkey-web-browser.desktop &
也把 amule 的選單檔打開好比對修改
leafpad aMule-2.2.2-i486/usr/share/applications/amule.desktop &
主要就是有兩項:
a.加一行中文選單
Name[zh_CN]=SeaMonkey 互联网浏览器 (不知這樣對嗎)
我們這邊的別給忘了, 照顧一下
Name[zh_TW]=SeaMonkey 網際網路瀏覽器
b. puppy 歸類名稱
"開始=>網際網路(互聯網)"的項目要這樣寫
Categories=X-Internet
原本的 Categories=Network;P2P; 在puppy不適用
改好就可以打包了, 安裝腳本這裡用不到, 下面的 pidgin-extra 再示範
dir2pet aMule-2.2.2-i486
第1項因為有選單檔存在, 直接按Enter即可
其它2~5項自行發揮, 這樣 aMule-2.2.2-i486.pet 打包就完成
恭喜啊

6.
我不想裝太多函數庫, 只把amule需要的拿出來另外打包:
先建立包目錄存放
mkdir amule-extra-2.2.2
這些額外執行時期函數預備放到個人函數目錄
/root/my-applications/lib 下面的 amule-extra 目錄
建立目錄:(加 -p 參數)
mkdir -p amule-extra-2.2.2/root/my-applications/lib/amule-extra
打開"開始=>設置=>那個檢查相依的程式(忘了簡體版翻譯名詞)"
檢查 amule, 秀出欠了一堆相依, 一個個補好放到 amule-extra
首先是:libcrypto++.so.7
find . -iname "libcrypto*"
沒找著 libcrypto++.so.7
因為debian/ubuntu通常把函數庫拆成執行時期libxxx跟編譯時期libxxx-dev,
所以再去下載這個沒有 -dev 結尾的
wget http://launchpadlibrarian.net/14207889/libcrypto%2B%2B7_5.5.2-2_i386.deb
解開後搜尋果然有發現
./amule/libcrypto++/usr/lib/libcrypto++.so.7.0.0
./amule/libcrypto++/usr/lib/libcrypto++.so.7
然後 ls -l libcrypto++/usr/lib/libcrypto++.so.7
會看到
libcrypto++/usr/lib/libcrypto++.so.7 -> libcrypto++.so.7.0.0
所以 libcrypto++.so.7 只是個分身, 為了升級 libcrypto++.so.7.0.0 的方便手法
所以直接保存本尊 libcrypto++.so.7.0.0 並改成分身的名字 libcrypto++.so.7
cp libcrypto++/usr/lib/libcrypto++.so.7.0.0 amule-extra-2.2.2/root/my-applications/lib/amule-extra/libcrypto++.so.7
接下來要檢查相依完整性, 先讓系統知道我們有個lib目錄:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/amule/amule-extra-2.2.2/usr/lib/amule-extra
(寫入 /etc/ld.so.conf 再 ldconfig 登記到 /etc/ld.so.cache 比較正式,
現在只是臨時用來測試, 用 LD_LIBRARY_PATH 環境變數即可,
而且關掉終端機就修改就消失, 不用去 ld.so.conf 改來改去)
ok! 下 ldd 命令檢查:
ldd amule-extra-2.2.2/usr/lib/amule-extra/libcrypto++.so.7
很好, 沒發現有 not fount 的項目, 沒欠相依, 運行沒問題

其它這些相依就比照辦理:
libupnp.so.3 libthreadutil.so.2 libixml.so.2 libwx_gtk2u_adv-2.8.so.0
libwx_gtk2u_core-2.8.so.0 libwx_baseu_net-2.8.so.0 libwx_baseu-2.8.so.0
(新手請注意啊:
請善用反白欲複製的字詞, 中鍵(或Shift+Insert)貼上功能,
跟Tab鍵自動接續功能, 往上的按鍵叫出之前下過的命令)

結果發現 libwx_gtk2u_adv-2.8.so.0 少了函數 libSDL-1.2.so.0
(執行時期少掉就要追下去補到完整)
同樣到 http://packages.slackware.it/
libSDL-1.2.so.0 <= sdl-1.2.13-i486-2.tgz
用 ldd 指令看看 libSDL-1.2.so.0 執行條件滿足了嗎:
有少相依, 有這項:
libvga.so.1 => not found ,運行有問題, 再去找來裝:
libvga.so.1 <= aaa_elflibs-12.2.0-i486-1.tgz
再用 ldd 指令看看 libvga.so.1 執行條件滿足了嗎:
很好, 都滿足了
所以補相依就依此原則處理, puppy8兄, 瞭了嗎
(8是發的意思吧, 很想發財哦, 我們這邊有個 168網友,一路發, 比你高明吧)

7.
打包 amule-extra-2.2.2 之前, 先幫它加上安裝/移除腳本:

a.編輯安裝腳本:
leafpad amule-extra-2.2.2/pinstall.sh
填入:
#!/bin/sh
echo "/root/my-applications/lib/amule-extra" >> /etc/ld.so.conf
ldconfig

b.編輯移除腳本:
leafpad amule-extra-2.2.2/puninstall.sh
填入:
#!/bin/sh
sed -i -e "/amule-extra/d" /etc/ld.so.conf
ldconfig

改成可執行檔(好像沒必要, 我還是保險一點):
chmod +x amule-extra/pinstall.sh
chmod +x amule-extra/puninstall.sh
打包起來:
dir2pet amule-extra-2.2.2
第1步填 no 因為沒選單, 其它的我都直接按 Enter
rox amule-extra-2.2.2.pet 裝上,
好像不必重開機, 因為pinstall有 ldconfig指令
執行 amule 應該有出現了吧
檢查一下pet檔大小
du -sh amule-extra-2.2.2.pet => 3.5M
安裝後大小
du -sh /root/my-applications/lib/amule-extra => 11M
很好, 有比全裝小很多, 很滿意
不過這是在 puppy 這種軟體安裝不多又要維持輕巧的系統上才這樣玩法
不然軟體裝多了, 每個都來搞個額外函數庫, 反而會讓這些執行時期函數重複
也嚴重浪費寶貴的時間跟精力

8.
home work:
請puppy8兄把上面借來的函數都用源碼編譯出puppy原生的執行時期函數
打包好把 amule成品 po上來貢養網友們, 就當是學費
做不來請把上文從記憶腦海中給徹底遺忘, 就當做了場夢
ok!
#2336
被你傳染, 我也猴急了, 打錯文章
這裡要改成amule 的:
5.
a.加一行中文選單
Name[zh_CN]=SeaMonkey 互联网浏览器 (不知這樣對嗎)
我們這邊的別給忘了, 照顧一下
Name[zh_TW]=SeaMonkey 網際網路瀏覽器

改成:
Name[zh_CN]=aMule 电驴
Name[zh_TW]=aMule 電子騾
#2337
我又來了

上面選單的圖示也出不來, 還得再改改
先看一下 aMule 的圖示叫啥檔名
ls aMule-2.2.2-i486/usr/share/pixmaps
=> amule.xpm
把 leafpad aMule-2.2.2-i486/usr/share/applications/amule.desktop &
這步驟的
Icon=amule
改成
Icon=amule.xpm
#2338
首先十分感谢你的帮助。

我收下来了,会好好学习的,不过先有个问题是:

官网上都有这个软件了、我重新打包能更好么?

为何将官网上的软件来解决依赖问题不是更好吗?

当然,这不是我偷懒和借口,但这样我初次打包的软件大家可放心使用?如果遇到出错信息我怎么处理呢?

因为从这里下载的音乐播放器用不了,我还未解决好呢。。

不知道你有电子邮件可留下联系么?
因为这样联系不太方便,这里好像也发了信息给你?
#2342
a.加一行中文選單
Name[zh_CN]=SeaMonkey 互联网浏览器 (不知這樣對嗎)
我們這邊的別給忘了, 照顧一下
Name[zh_TW]=SeaMonkey 網際網路瀏覽器

这个是啥意思呢?因为好像amule是支持所有语言的吧?都是直接安装好就显示中文的了啊,它设置的是使用“默认语言”就是中文的。
得收下来慢慢学习。

不过我还不会解决像上边所说的已经没有依赖问题的,但显示有依赖问题的应该怎么解决呢?不知道你有电子邮件可留下联系么?
因为这样联系不太方便,这里好像也发了信息给你?
#2345
看了看又发现问题,在打包过程中需要的函數自己编译,但是最终如何编译进成品的amule包里边去呢?因为我自己编译到系统上有这个函數了,但是别人的系统没有啊,当打包好的amule到别的系统是不是不能用了?——————未仔细看完内容,先问问,如果后面有答案的先鄙视一下我自己,我再慢慢看,不过如果你有时间的话最好给我详细些解释,或者给个邮件让我有需要时找你联系。
#2348
我又來了
這裡又筆誤, 再改改
(被您不斷催促, 筆誤可真多)
-------------------------------------------------------------------
7.
a.編輯安裝腳本:
leafpad amule-extra-2.2.2/pinstall.sh
填入:
#!/bin/sh
echo "/root/my-applications/lib/amule-extra" >> /etc/ld.so.conf
ldconfig
-------------------------------------------------------------------
這個 /etc/ld.so.conf 請改成 ./etc/ld.so.conf 或 etc/ld.so.conf

也就是變成
-------------------------------------------------------------------
7.
a.編輯安裝腳本:
leafpad amule-extra-2.2.2/pinstall.sh
填入:
#!/bin/sh
echo "/root/my-applications/lib/amule-extra" >> ./etc/ld.so.conf
ldconfig
-------------------------------------------------------------------
安裝腳本pinstall.sh官網範例都用相對路徑
然而移除腳本puninstall.sh我試驗結果是採絕對路徑
所以上面的
7.
b.編輯移除腳本:
...
sed -i -e "/amule-extra/d" /etc/ld.so.conf
...
這裡的 /etc/ld.so.conf 是絕對路徑
============================================
這裡也筆誤:
Name[zh_TW]=aMule 電子騾
應該是
Name[zh_TW]=aMule 電子驢
============================================
> 官网上都有这个软件了、我重新打包能更好么?
> 为何将官网上的软件来解决依赖问题不是更好吗?
> 当然,这不是我偷懒和借口,但这样我初次打包的软件大家可放心使用?如果遇到出错信息我怎么处理呢?

puppy發兄不是要求小弟教你把包嗎, 不從頭來一遍你怎麼學習
你就一步一腳印的跟著照做就能得到你出生到現在生平第一個自己DIY的打包作品
============================================
> 看了看又发现问题,在打包过程中需要的函數自己编译,但是最终如何编译进成品的amule包里边去呢?
> 因为我自己编译到系统上有这个函數了,但是别人的系统没有啊,当打包好的amule到别的系统是不是不能用了?

這個我另外放在 amule-extra-2.2.2.pet 包裡頭
就是 6. 7. 兩個步驟說的方法做出來的額外函數包
要不然合併到 aMule-2.2.2-i486.pet 也成, 看你的意思囉
戲法人人會變 各有巧妙不同
自己發揮吧, 上面只是讓你打個基礎
#2349
首先十分感谢你的帮助指导。
我会慢慢用心学习,内容我都收藏保存下来了。
但如若你有时间的话,我希望从简单的问题解决起。
,我是想先弄懂这个解决依赖问题:
pinstall.sh
应该怎么编译才不会提示有依赖错误呢?
就是软件本身全依赖集成好了,但是安装的搜索路径没找到例如火狐这样的情况,我想清楚的是像这种情况,能否通过pinstall.sh文件解决掉让软件在安装过程中不再提示呢?
#11815
comment1, cefpodoxime, srz, buy sumycin, =[[[,

发表新评论

  • 你可以在文本中使用BBCode标记语言。 URL会自动被转为链接。

更多关於格式化选项的信息

CAPTCHA
请验证您是否是机器人。
Image CAPTCHA
Enter the characters shown in the image.