如何安裝 StarUML-v2.8.0-64-bit.deb ? [論壇 - 新手村]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊

« 1 (2)


回覆: 如何安裝 StarUML-v2.8.0-64-bit.deb ?
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 36
HP : 0 / 898
MP : 664 / 28692
EXP: 92
離線
以下測試的環境是「Xubuntu 16.04 amd64 英文界面」。


================================================================================

## 前提說明

這篇回覆,提供另一種安裝的方式,不透過「套件管理系統」的安裝方式。
可以對照「#10」來看。

原本的「StarUML-v2.8.0-64-bit.deb」會安裝「StarUML」到「/opt」底下,
這篇要介紹安裝到「~/app」這個資料夾底下,您也可以安裝到其他的路徑。

關於「Desktop Entry」,「系統全域」是安裝到「/usr/share/applications/」
這篇要介紹安裝到「個人區域」,也就是安裝到「~/.local/share/applications」

關於「Icon」,「系統全域」是安裝到「/usr/share/icons/」
這篇要介紹安裝到「個人區域」,也就是安裝到「~/.local/share/icons」

關於上面提到「libgcrypt11」的問題,上面「#10」「#9
原本是安裝到「系統全域」的「/lib/x86_64-linux-gnu/」, <-- 我的環境是這個路徑。
這篇要介紹安裝到「~/app/StarUML/opt/staruml/lib/」<-- 可以參考「~/app/StarUML/opt/staruml/staruml」的內容。


關於「libudev.so.0」,也是一樣的模式,上面的「#10
原本是設定到「系統全域」的「/lib/x86_64-linux-gnu/」,
這篇要介紹安裝到「~/app/StarUML/opt/staruml/lib/」<-- 可以參考「StarUML-v2.8.0-64-bit.deb」的「Maintainer Scripts」,
最底下會說明,如何找到「Maintainer Scripts」。

再來還會提到兩個輔助工具「xdg-desktop-menu」和「xdg-icon-resource」,是屬於「xdg-utils」這個套件。
跟「Desktop Entry」和「Icon」有關。


================================================================================

## 安裝步驟

執行下面這段「Script」。


#!/usr/bin/env bash

## install-app.sh

## 產生放置資料夾
mkdir -p $HOME/app


## 切換到「$HOME/app」這個資料夾
cd $HOME/app

## 下載 deb 檔
wget -c http://staruml.io/download/release/v2.8.0/StarUML-v2.8.0-64-bit.deb
wget -c http://security.ubuntu.com/ubuntu/pool/main/libg/libgcrypt11/libgcrypt11_1.5.3-2ubuntu4.4_amd64.deb


## 解開 deb 檔
dpkg -x StarUML-v2.8.0-64-bit.deb StarUML
dpkg -x libgcrypt11_1.5.3-2ubuntu4.4_amd64.deb libgcrypt11


## 複製「libgcrypt.so.11」和「libgcrypt.so.11.8.2」到「StarUML/opt/staruml/lib/」
cp libgcrypt11/lib/x86_64-linux-gnu/libgcrypt.so.11 StarUML/opt/staruml/lib/
cp libgcrypt11/lib/x86_64-linux-gnu/libgcrypt.so.11.8.2 StarUML/opt/staruml/lib/


## 產生「StarUML/opt/staruml/lib/libudev.so.0」
ln -s /lib/x86_64-linux-gnu/libudev.so.1 StarUML/opt/staruml/lib/libudev.so.0



然後執行「~/app/StarUML/opt/staruml/staruml」就會啟動「staruml」。


$ ~/app/StarUML/opt/staruml/staruml



底下會解釋如何安裝「Desktop Entry」和「Icon」。

================================================================================

## 其他相依套件

執行


$ dpkg -f StarUML-v2.8.0-64-bit.deb Depends



顯示


gconf-service, libasound2 (>= 1.0.23), libatk1.0-0 (>= 1.12.4), libc6 (>= 2.11), libcairo2 (>= 1.6.0), libcups2 (>= 1.4.0), libdbus-1-3 (>= 1.2.14), libexpat1 (>= 1.95.8), libfontconfig1 (>= 2.8.0), libfreetype6 (>= 2.3.9), libgcc1 (>= 1:4.1.1), libgconf-2-4 (>= 2.31.1), libgcrypt11 (>= 1.4.5), libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.18.0), libgtk2.0-0 (>= 2.24.0), libnspr4 (>= 1.8.0.10), libnss3 (>= 3.12.6), libpango1.0-0 (>= 1.22.0), libstdc++6 (>= 4.6), libudev0 (>= 147) | libudev1 (>= 198), libx11-6 (>= 2:1.4.99.1), libxcomposite1 (>= 1:0.3-1), libxdamage1 (>= 1:1.1), libxext6, libxfixes3, libxrandr2 (>= 2:1.2.0), libxrender1, ca-certificates, libcurl3, lsb-base (>= 3.2), xdg-utils (>= 1.0.2), wget



我測試的系統,目前已經有安裝很多套件了,應該有滿足上面的相依,所以我沒有再做其他安裝的動作
若您的系統,有缺上面相依的套件的話,就請自行安裝。
目前還沒有花時間把這段去寫成「script」。也許有其他人可以來補充。

================================================================================

## 安裝 Desktop Entry

只要產生一個檔案「~/.local/share/applications/staruml.desktop」,填寫相關的格式就行了。



目前這篇討論的是安裝到個人的HOME底下,所以就不安裝在「/usr/share/applications/staruml.desktop」這個路徑。

除了自行撰寫,剛剛解開的「StarUML-v2.8.0-64-bit.deb」裡面也有提供一個檔案「StarUML/opt/staruml/staruml.desktop」。

原本的內容如下


[Desktop Entry]
Name=StarUML
Type=Application
Categories=Development
Exec=/opt/staruml/staruml %U
Icon=staruml
MimeType=text/html;
Keywords=Design;Modeling;Development;UML;




以下假設使用的帳號叫「user」,所以家目錄就是「/home/user」

所以複製「StarUML/opt/staruml/staruml.desktop」這個檔案
到「~/.local/share/applications/staruml.desktop」,

然後修改「~/.local/share/applications/staruml.desktop」。
只要將「Exec=/opt/staruml/staruml %U」
改成「Exec=/home/user/app/StarUML/opt/staruml/staruml %U」就行了


這樣就可以在「開始功能表 」找到「StarUML」的啟用圖示,
「Xubuntu」的「開始功能表」使用的是「whiskermenu」
所以「StarUML」的啟用圖示,除了可以打關鍵字找到,
也可以在「Development / StarUML」找到,可以參考上面的「Categories=Development」。



以下是參考的「Script」。

參考一


#!/usr/bin/env bash

## install-desktop-entry-1.sh

SRC_STARUML_DESKTOP_PATH=StarUML/opt/staruml/staruml.desktop
DES_STARUML_DESKTOP_PATH=~/.local/share/applications/staruml.desktop

SRC_STARUML_EXEC_PATH=/opt/staruml/staruml
DES_STARUML_EXEC_PATH=$(pwd)/StarUML/opt/staruml/staruml

ESC_SRC_STARUML_EXEC_PATH=${SRC_STARUML_EXEC_PATH//\//\\\/}
ESC_DES_STARUML_EXEC_PATH=${DES_STARUML_EXEC_PATH//\//\\\/}

## cp StarUML/opt/staruml/staruml.desktop ~/.local/share/applications/staruml.desktop

##  可以使用下面這一行進行複製。
# cp "$SRC_STARUML_DESKTOP_PATH" "DES_STARUML_DESKTOP_PATH"

## 也可以透過「xdg-desktop-menu」這個工具來產生。
xdg-desktop-menu install $SRC_STARUML_DESKTOP_PATH --novendor


## 顯示「執行取代的指令」
echo sed -i -e "s/${ESC_SRC_STARUML_EXEC_PATH}/${ESC_DES_STARUML_EXEC_PATH}/g" $DES_STARUML_DESKTOP_PATH

## 真正「執行取代的指令」
sed -i -e "s/${ESC_SRC_STARUML_EXEC_PATH}/${ESC_DES_STARUML_EXEC_PATH}/g" $DES_STARUML_DESKTOP_PATH





參考二


#!/usr/bin/env bash

## install-desktop-entry-1.sh

STARUML_MENU_PATH=$HOME/.local/share/applications/staruml.desktop
STARUML_DESKTOP_PATH=$HOME/Desktop/staruml.desktop
STARUML_EXEC_PATH=$(pwd)/StarUML/opt/staruml/staruml

cat > $STARUML_MENU_PATH << EOF
[Desktop Entry]
Name=StarUML
Type=Application
Categories=Development
Exec=$STARUML_EXEC_PATH %U
Icon=staruml
MimeType=text/html;
Keywords=Design;Modeling;Development;UML;
EOF

## 複製一份到「~/Desktop/staruml.desktop」
cp $STARUML_MENU_PATH $STARUML_DESKTOP_PATH
chmod u+x $STARUML_DESKTOP_PATH

## 或是產生一個「Symbolic link」到「~/Desktop/staruml.desktop」也行
## ln -s $STARUML_MENU_PATH $STARUML_DESKTOP_PATH




另外也可以複製一份到「~/Desktop/staruml.desktop」,
或是做個捷徑到「~/Desktop/staruml.desktop」,
這樣就會在「桌面」顯示圖示,可以點選啟動「staruml」。
這個可以參考之前寫的另一篇「回覆#2」。


關於「Icon=staruml」,接續著來說明「如何安裝 Icon」。

================================================================================

## 安裝 Icon

在「~/app/StarUML/opt/staruml/」,有四個「png」檔。

執行


$ ls ~/app/StarUML/opt/staruml/*.png -1



顯示


/home/user/app/StarUML/opt/staruml/appshell128.png
/home/user/app/StarUML/opt/staruml/appshell256.png
/home/user/app/StarUML/opt/staruml/appshell32.png
/home/user/app/StarUML/opt/staruml/appshell48.png



現在分別將這四個檔案複製到下面四個路徑


~/.local/share/icons/hicolor/128x128/apps/staruml.png
~/.local/share/icons/hicolor/256x256/apps/staruml.png
~/.local/share/icons/hicolor/32x32/apps/staruml.png
~/.local/share/icons/hicolor/48x48/apps/staruml.png



所以可以執行下面的簡易「Script」來達到這個動作


#!/usr/bin/env bash

## 確保資料夾存在
mkdir -p ~/.local/share/icons/hicolor/128x128/
mkdir -p ~/.local/share/icons/hicolor/256x256/
mkdir -p ~/.local/share/icons/hicolor/32x32/
mkdir -p ~/.local/share/icons/hicolor/48x48/

## 複製icon檔案
cp ~/app/StarUML/opt/staruml/appshell128.png ~/.local/share/icons/hicolor/128x128/apps/staruml.png
cp ~/app/StarUML/opt/staruml/appshell256.png ~/.local/share/icons/hicolor/256x256/apps/staruml.png
cp ~/app/StarUML/opt/staruml/appshell32.png ~/.local/share/icons/hicolor/32x32/apps/staruml.png
cp ~/app/StarUML/opt/staruml/appshell48.png ~/.local/share/icons/hicolor/48x48/apps/staruml.png




我們可以執行下面的指令來確認


$ ls ~/.local/share/icons/hicolor/*/apps/staruml.png -1



顯示


/home/user/.local/share/icons/hicolor/128x128/apps/staruml.png
/home/user/.local/share/icons/hicolor/256x256/apps/staruml.png
/home/user/.local/share/icons/hicolor/32x32/apps/staruml.png
/home/user/.local/share/icons/hicolor/48x48/apps/staruml.png



我們也可以透過「xdg-icon-resource」這個輔助工具來達到這個動作。
底下會在額外說明「xdg-icon-resource」的用法。

以下是參考「Script」。


#!/usr/bin/env bash

xdg-icon-resource install --novendor --mode user --size 128 StarUML/opt/staruml/appshell128.png staruml
xdg-icon-resource install --novendor --mode user --size 256 StarUML/opt/staruml/appshell256.png staruml
xdg-icon-resource install --novendor --mode user --size 32 StarUML/opt/staruml/appshell32.png staruml
xdg-icon-resource install --novendor --mode user --size 48 StarUML/opt/staruml/appshell48.png staruml



上面的兩個方式,我們也可以改寫,以下是參考「Script」


#!/usr/bin/env bash

## https://www.google.com.tw/#q=sed+replace+string
## https://www.cyberciti.biz/tips/bash-shell-parameter-substitution-2.html
## https://www.cyberciti.biz/faq/unix-linux-replace-string-words-in-many-files/

STARUML_APP_DIR_PATH=$HOME/app/StarUML/opt/staruml
for icon in "$STARUML_APP_DIR_PATH"/*.png; do
	size="${icon##*/appshell}"
	size="${size%.png}"
	#echo mkdir -p "~/.local/share/icons/hicolor/""$size""x""$size""/"
	mkdir -p "$HOME/.local/share/icons/hicolor/""$size""x""$size""/"
	#echo cp $icon "$HOME/.local/share/icons/hicolor/""$size""x"$size"/apps/staruml.png"
	cp $icon "$HOME/.local/share/icons/hicolor/""$size""x"$size"/apps/staruml.png"
done




使用「xdg-icon-resource」


#!/usr/bin/env bash

STARUML_APP_DIR_PATH=$HOME/app/StarUML/opt/staruml
for icon in "$STARUML_APP_DIR_PATH"/*.png; do
	size="${icon##*/appshell}"
	size="${size%.png}"
	echo xdg-icon-resource install --novendor --mode user --size "$size" "$icon" staruml
	xdg-icon-resource install --novendor --mode user --size "$size" "$icon" staruml
done




================================================================================

## 移除 Icon

若是要移除,只要把剛剛安裝的4個檔案刪除就行了。


rm -f ~/.local/share/icons/hicolor/128x128/apps/staruml.png
rm -f ~/.local/share/icons/hicolor/256x256/apps/staruml.png
rm -f ~/.local/share/icons/hicolor/32x32/apps/staruml.png
rm -f ~/.local/share/icons/hicolor/48x48/apps/staruml.png



執行下面指令確認


$ ls ~/.local/share/icons/hicolor/*/apps/staruml.png -1


會顯示


ls: cannot access '/home/user/.local/share/icons/hicolor/*/apps/staruml.png': No such file or directory



一樣可以透過「xdg-icon-resource」這個輔助工具來達到「移除」這個動作。


xdg-icon-resource uninstall --novendor --mode user --size 128 staruml
xdg-icon-resource uninstall --novendor --mode user --size 256 staruml
xdg-icon-resource uninstall --novendor --mode user --size 32 staruml
xdg-icon-resource uninstall --novendor --mode user --size 48 staruml



上面兩種方式,一樣改寫如下


#!/usr/bin/env bash

STARUML_APP_DIR_PATH=$HOME/app/StarUML/opt/staruml
for icon in "$STARUML_APP_DIR_PATH"/*.png; do
	size="${icon##*/appshell}"
	size="${size%.png}"
	#echo rm -f "$HOME/.local/share/icons/hicolor/""$size""x"$size"/apps/staruml.png"
	rm -f "$HOME/.local/share/icons/hicolor/""$size""x"$size"/apps/staruml.png"
done



使用「xdg-icon-resource」的「script」


#!/usr/bin/env bash

STARUML_APP_DIR_PATH=$HOME/app/StarUML/opt/staruml
for icon in "$STARUML_APP_DIR_PATH"/*.png; do
	size="${icon##*/appshell}"
	size="${size%.png}"
	echo xdg-icon-resource uninstall --novendor --mode user --size "$size" staruml
	xdg-icon-resource uninstall --novendor --mode user --size "$size" staruml
done



================================================================================

## 說明 「xdg-icon-resource」的使用方法

先執行

$ man xdg-icon-resource

可以看到其中一段


xdg-icon-resource install [--noupdate] [--novendor] [--theme theme] [--context context] [--mode mode] --size size icon-file [icon-name]



先給下面這段「pattern」,等會可以對照著看


~/.local/share/icons/$theme/$sizex$size/$context/$icon-name.$extension-name



剛剛的例子,

要安裝「~/app/StarUML/opt/staruml/appshell128.png」這個icon檔案,

到「~/.local/share/icons/hicolor/128x128/apps/staruml.png」這個路徑
這個路徑,可以對照上面的「pattern」。

所以欄位如下


theme: hicolor
size: 128
context: apps
icon-name: staruml
extension-name: png



然後以下是安裝的動作


## 確保資料夾存在
mkdir -p ~/.local/share/icons/hicolor/128x128/apps

## 透過「cp」,執行安裝的動作
cp ~/app/StarUML/opt/staruml/appshell128.png ~/.local/share/icons/hicolor/128x128/apps/staruml.png




若是透過「xdg-icon-resource」的方式安裝,指令如下,


xdg-icon-resource install --novendor --theme hicolor --context apps --mode user --size 128 ~/app/StarUML/opt/staruml/appshell128.png staruml



欄位如下


--theme: hicolor <-- 預設值是「hicolor」 ,所以「--theme hicolor」可省略
--context: apps <-- 預設值是「apps」,所以「--context apps」可省略
--mode: user <-- 預設值是「system」,所以「--mode user」不可省略
--size: 128
icon-file: ~/app/StarUML/opt/staruml/appshell128.png
icon-name: staruml




所以上面可以省略一些欄位,改寫如下


xdg-icon-resource install --novendor --mode user --size 128 ~/app/StarUML/opt/staruml/appshell128.png staruml



關於「--mode」

*「--mode user」指的是安裝到「~/.local/share/icons/」
*「--mode system」指的是安裝到「/usr/share/icons/」


還有要注意上面的「icon-name」是「staruml」,所以指令下的時候,必須填寫「--novendor」。
否則就會出現下面的訊息


xdg-icon-resource: icon name 'staruml' does not have a proper vendor prefix
A vendor prefix consists of alpha characters ([a-zA-Z]) and is terminated
with a dash ("-"). An example icon name is 'example-staruml'
Use --novendor to override or 'xdg-icon-resource --manual' for additional info.



若是要移除剛剛安裝的icon檔案,執行指令如下


rm -f ~/.local/share/icons/hicolor/128x128/apps/staruml.png



一樣可以透過「xdg-icon-resource」的方式移除,指令如下,


xdg-icon-resource uninstall --novendor --theme hicolor --context apps --mode user --size 128 staruml



或是


xdg-icon-resource uninstall --novendor --mode user --size 128 staruml



================================================================================

## xdg-utils

關於「xdg-icon-resource」的使用方法,在寫這篇「回覆」的時候,本來要寫一個類似這篇的案例說明,
雖然腦海中預先有想法了,不過那時候我寫完「xfconf-query」的用法後,就擱置了。
那時候本來預計要透過「Sublime Text 3」來當範例說明,
所以各位看官也可以拿「Sublime Text 3」來當「練習」。

接下來簡易探索「xdg-utils」這個套件

執行


$ which xdg-icon-resource



顯示


/usr/bin/xdg-icon-resource



執行


$ dpkg -S /usr/bin/xdg-icon-resource



顯示


xdg-utils: /usr/bin/xdg-icon-resource



表示「/usr/bin/xdg-icon-resource」是屬於「xdg-utils」這個套件。

也可以改寫成下面這一行指令,一樣會顯示上面的結果


$ dpkg -S $(which xdg-icon-resource)



或是改寫成改寫成下面這一行指令,一樣會顯示上面的結果


$ dpkg -S `which xdg-icon-resource`



執行


$ dpkg -L xdg-utils



顯示


/.
/usr
/usr/bin
/usr/bin/xdg-settings
/usr/bin/xdg-desktop-icon
/usr/bin/xdg-mime
/usr/bin/xdg-open
/usr/bin/xdg-screensaver
/usr/bin/xdg-email
/usr/bin/xdg-icon-resource
/usr/bin/xdg-desktop-menu
/usr/share
/usr/share/doc
/usr/share/doc/xdg-utils
/usr/share/doc/xdg-utils/RELEASE_NOTES
/usr/share/doc/xdg-utils/copyright
/usr/share/doc/xdg-utils/changelog.Debian.gz
/usr/share/doc/xdg-utils/TODO
/usr/share/doc/xdg-utils/README
/usr/share/doc/xdg-utils/NEWS.Debian.gz
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/xdg-open.1.gz
/usr/share/man/man1/xdg-screensaver.1.gz
/usr/share/man/man1/xdg-settings.1.gz
/usr/share/man/man1/xdg-desktop-icon.1.gz
/usr/share/man/man1/xdg-desktop-menu.1.gz
/usr/share/man/man1/xdg-icon-resource.1.gz
/usr/share/man/man1/xdg-email.1.gz
/usr/share/man/man1/xdg-mime.1.gz
/usr/bin/browse



執行下面指令,了解「xdg-utils」這個套件,有哪些manpage可讀 (這個技巧紀錄「在這」)


$ dpkg -L xdg-utils | grep '/man/man.*/'




顯示


/usr/share/man/man1/xdg-open.1.gz
/usr/share/man/man1/xdg-screensaver.1.gz
/usr/share/man/man1/xdg-settings.1.gz
/usr/share/man/man1/xdg-desktop-icon.1.gz
/usr/share/man/man1/xdg-desktop-menu.1.gz
/usr/share/man/man1/xdg-icon-resource.1.gz
/usr/share/man/man1/xdg-email.1.gz
/usr/share/man/man1/xdg-mime.1.gz



$ man xdg-open
$ man xdg-screensaver
$ man xdg-settings
$ man xdg-desktop-icon
$ man xdg-desktop-menu
$ man xdg-icon-resource
$ man xdg-email
$ man xdg-mime


執行


$ file /usr/bin/xdg-icon-resource



顯示


/usr/bin/xdg-icon-resource: POSIX shell script, ASCII text executable



關於「/usr/bin/xdg-icon-resource」是「shell script」,所以有興趣深究的話,也可以直接觀看裡面的內容


$ less /usr/bin/xdg-icon-resource



================================================================================

## StarUML-v2.8.0-64-bit.deb 探索指引

### 「DEBIAN/postinst」

另外可以執行


$ dpkg -e StarUML-v2.8.0-64-bit.deb



會產生一個「DEBIAN」的資料夾,這裡面會放置「Maintainer Scripts」。

執行


$ tree DEBIAN



顯示


DEBIAN/
├── control
├── postinst
├── postrm
└── prerm

0 directories, 4 files



可以研讀「DEBIAN/postinst」這個檔案,裡面有包含上面提到的一些用法。
若是透過「dpkg」安裝「StarUML-v2.8.0-64-bit.deb」,則會在「/var/lib/dpkg/info/staruml.postinst」找到。


### 「StarUML/opt/staruml/staruml」

還有可以研讀「StarUML/opt/staruml/staruml」這個檔案,也是「Shell Script」,
要了解的就是「LD_LIBRARY_PATH」,
這跟我之前提到的這篇「回覆#5」裡面列的「## lib 議題相關參考網址」有關聯。


================================================================================

報告完畢


2017/2/28 3:26
應用擴展 工具箱
回覆: 如何安裝 StarUML-v2.8.0-64-bit.deb ?
會員二級
註冊日期:
2009/12/17 21:17
所屬群組:
已註冊使用者
等級: 8
HP : 0 / 186
MP : 30 / 7237
EXP: 46
離線
感謝 nana 及各位前輩,StarUML 依照指點安裝好了!

原本只是在家自修 Java,想使用 StarUML 學學 UML,沒想到學了更多,依照邏輯、知道了什麼叫 bash、知道了"一點點" dpkg、grep指令,雖花了一個多月,收穫很多,雖然到現在還是不知道 libgcrypt11 到底是什麼,哈!

非常感謝各位,越來越覺得 Ubuntu 的可愛。

再次感謝大家!

2017/3/31 8:29
應用擴展 工具箱
回覆: 如何安裝 StarUML-v2.8.0-64-bit.deb ?
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 36
HP : 0 / 898
MP : 664 / 28692
EXP: 92
離線
clarkliang 寫到:
感謝 nana 及各位前輩,StarUML 依照指點安裝好了!

原本只是在家自修 Java,想使用 StarUML 學學 UML,沒想到學了更多,依照邏輯、知道了什麼叫 bash、知道了"一點點" dpkg、grep指令,雖花了一個多月,收穫很多,雖然到現在還是不知道 libgcrypt11 到底是什麼,哈!

非常感謝各位,越來越覺得 Ubuntu 的可愛。

再次感謝大家!



關於

clarkliang 寫到:
雖然到現在還是不知道 libgcrypt11 到底是什麼




雖然關於這部份的議題,我還沒研究透徹,不過可以給您一個方向去探究。

我寫了一些範例,放在「GitHub」上,供您參考,輔助您理解這些概念。

================================================================================

## 撰寫此文的開發環境

* Xubuntu 16.04 amd64 英文界面

================================================================================

## 前置動作

執行下面指令,安裝「build-essential」。


$ sudo apt-get install build-essential



================================================================================


## 範例一

samwhelp 寫到:
其餘的,請參考另一篇討論的回覆「#3」和「#5」「#4」。

在「#5」有列 lib 相關的參考連結,可以了解一些 lib 的概念。



我在之前的「回覆 #4」的最下方有提到另一個「回覆 #5」,請找尋「## lib 議題相關參考網址」。

而「範例一」就是根據「[心得] 用gcc 自製 Library」的「2. Shared libraries」改寫成的範例。


預計要建立一個「lib」名稱是「demo」,也就是「libdemo」。

原始檔案是「hello.c」,「hi.c」,「lib-demo.h」。

編譯的指令放在「lib-build.sh」。

可以執行下面指令編譯。


$ ./lib-build.sh



就會產生「hi.o」和「hello.o」這兩個檔案,
還有「libdemo.so.1.0.0」這個檔案,
並且產生「libdemo.so.1」,是「symbolic link」到「libdemo.so.1.0.0」。


然後如何編譯和使用「libdemo」

原始檔案是「main.c」。

編譯的指令放在「main-build.sh」。

可以執行下面指令編譯。


$ ./main-build.sh



就會產生一個執行檔「app」。

執行


$ ./app



顯示


./app: error while loading shared libraries: libdemo.so.1: cannot open shared object file: No such file or directory



要改執行下面指令,編寫在「run.sh」。


$ LD_LIBRARY_PATH=. ./app



顯示


hello
hi



也可以執行「$ ./run.sh」。

這也是我上面「回覆 #11]的最下方有提到的
您可以參考「StarUML/opt/staruml/staruml」裡面寫的內容,裡面就有使用到「LD_LIBRARY_PATH」。

或是您也可以閱讀「$ man ld.so」,找尋「LD_LIBRARY_PATH」,可以找到相關的說明。

================================================================================


## 範例二

使用「libnotify4」來舉例,

執行下面指令安裝「libnotify-dev


$ sudo apt-get install libnotify-dev




C的程式碼可以參考「Arch Wiki / Desktop notifications

改寫後,也就是「main.c」這個檔案。

然後執行下面指令,就可以編譯「main.c」。


$ gcc -o app main.c $(pkg-config --cflags --libs libnotify)



上面指令編寫到「build.sh」這個檔。

所以也可以執行下面指令,來編譯「main.c」。


$ ./build.sh



編譯成功後,就會產生「app」這個檔案。

執行下面指令


$ ./app



就會看到一個「訊息對話框」。


接下來探索相關「Package」。

可以執行


$ dpkg -L libnotify4



顯示


/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/libnotify4
/usr/share/doc/libnotify4/AUTHORS
/usr/share/doc/libnotify4/changelog.Debian.gz
/usr/share/doc/libnotify4/copyright
/usr/share/doc/libnotify4/NEWS.gz
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libnotify.so.4.0.0
/usr/lib/x86_64-linux-gnu/libnotify.so.4



請注意「/usr/lib/x86_64-linux-gnu/libnotify.so.4.0.0
和「/usr/lib/x86_64-linux-gnu/libnotify.so.4」這兩個檔案。

執行


$ ls /usr/lib/x86_64-linux-gnu/libnotify.so.4 -l



顯示


lrwxrwxrwx 1 root root 18 Apr 24 2016 /usr/lib/x86_64-linux-gnu/libnotify.so.4 -> libnotify.so.4.0.0



執行


$ file /usr/lib/x86_64-linux-gnu/libnotify.so.4



顯示


/usr/lib/x86_64-linux-gnu/libnotify.so.4: symbolic link to libnotify.so.4.0.0



還記得剛剛上面提到的

samwhelp 寫到:
還有「libdemo.so.1.0.0」這個檔案,
並且產生「libdemo.so.1」,是「symbolic link」到「libdemo.so.1.0.0」。




* 「libdemo.so.1」對照「libnotify.so.4」
* 「libdemo.so.1.0.0」對照「libnotify.so.4.0.0」


================================================================================

## libgcrypt20

執行


$ dpkg -L libgcrypt20 | sort



顯示


/.
/lib
/lib/x86_64-linux-gnu
/lib/x86_64-linux-gnu/libgcrypt.so.20
/lib/x86_64-linux-gnu/libgcrypt.so.20.0.5
/usr
/usr/share
/usr/share/doc
/usr/share/doc/libgcrypt20
/usr/share/doc/libgcrypt20/AUTHORS.gz
/usr/share/doc/libgcrypt20/changelog.Debian.gz
/usr/share/doc/libgcrypt20/copyright
/usr/share/doc/libgcrypt20/NEWS.gz
/usr/share/doc/libgcrypt20/README.gz
/usr/share/doc/libgcrypt20/THANKS.gz



執行


$ ls /lib/x86_64-linux-gnu/libgcrypt.so.20 -l



顯示


lrwxrwxrwx 1 root root 19 Aug 19 2016 /lib/x86_64-linux-gnu/libgcrypt.so.20 -> libgcrypt.so.20.0.5



執行


$ file /lib/x86_64-linux-gnu/libgcrypt.so.20



顯示


/lib/x86_64-linux-gnu/libgcrypt.so.20: symbolic link to libgcrypt.so.20.0.5



* 「libdemo.so.1」對照「libgcrypt.so.20」
* 「libdemo.so.1.0.0」對照「libgcrypt.so.20.0.5」

請再對照上面之前的回覆。

================================================================================

相關的議題,也可以參考這個「影片」和這個「影片」,
然後從其中的關鍵字,找到更多的參考資料。

還有下面這篇

* https://github.com/tinyclub/open-c-book (觀看)

之前有列在另一個「回覆 #5」,裡面有列其他的參考連結,就不轉貼過來了。

================================================================================

## manpage

* $ man ldd
* $ man ldconfig
* $ man ld.so
* LD_LIBRARY_PATH

================================================================================

以上提供參考,

因為有些我也還沒研究透徹,目前只有研究到這,比較深入的,就需要您自行去深入探索了,給您探索的起點。

報告完畢


2017/3/31 17:09
應用擴展 工具箱
回覆: 如何安裝 StarUML-v2.8.0-64-bit.deb ?
會員二級
註冊日期:
2009/12/17 21:17
所屬群組:
已註冊使用者
等級: 8
HP : 0 / 186
MP : 30 / 7237
EXP: 46
離線
好的,謝謝!

2017/4/1 13:37
應用擴展 工具箱

« 1 (2)

 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.