Ubuntu 真難用
兩個工作資歷加起來超過 15 年,可跨 UNIX/Windows 開發軟體的工程師,為了要在 Ubuntu 上編譯 C 的 hello world 程式,竟然要花上半小時。
工程師 A:「B 你能不能來幫我看看,為甚麼 configure 不過。」
工程師 B 仔細地看了一下螢幕上的 error messages,發現是因為找不到 crt1.o。
工程師 B:「看起來像是 libc 沒有裝,我們可以試著編一個 hello world 來確認。」
於是工程師 A 寫了一個 hello.c 如下:
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
用 gcc 編譯,gcc 會動,但跑出錯誤訊息,說找不到 stdio.h。
工程師 B:「果然。」
工程師 A 順手打了一下指令:
SHELL> locate stdio.h Not found.
工程師 A:「Ubuntu 應該是用 apt-get 安裝軟體吧?」
工程師 A 試著下指令:
SHELL> sudo apt-get install libc Cannot find package libc
工程師 B:「可能是叫做 glibc。」
工程師 A 試著再下指令:
SHELL> sudo apt-get install glibc Cannot find package glibc
工程師 A:「見鬼了,誰知道 libc 應該要叫什麼啊!要怎麼知道套件的名字是什麼?」
工程師 A 試著打下面的指令:
SHELL> apt-get search libc Invalid command 'search'.
工程師 B:「還是用 GUI 工具好了,至少應該會有個搜尋框可以用。」
工程師 A 從系統選單裡找到 synaptic 這支程式,查了幾次, 用 glibc 找不到任何東西,後來改用 libc 當關鍵字找,終於找到 libc6-dev 這個套件[1]。
實在無法理解,為什麼 apt-get 沒有提供搜尋的功能,誰知道到底套件叫做 libc、glibc 還是 libc6-dev 啊。後來我知道,似乎搜尋的指令下法是 apt-cache search,可是 cache 這個字眼,跟 search 感覺上就是沾不到邊,真是莫名其妙的組合。其實我覺得,apt-get 的 get 也很莫名其妙,感覺上就是功能越做越多,沒有一開始就設計完善,最後只好通通塞在一起。
用 synaptic 的過程也是挫折感十足。利用其搜尋功能,確實地找到了 libc6-dev 這個套件,可是勾選安裝後,就不曉得接下來要怎麼辦,才能真的開始安裝。樸素的視窗,兩個人硬是 try 了十分鐘,才終於明瞭,要按工具列的「Apply」按鈕,才能開始安裝。誰知道這個 Apply 是在 apply 什麼啊,難道不能用個「Start」或「Next」的按鈕嗎?又不是在搞 version control,還要下個 commit 才會真正改變 repository。
最後,總算成功地編譯了 hello world,花了半小時。XD
然後我還是不懂,為什麼預設裝好有 gcc 但沒有 libc 跟標準 C 的 include files 可以用。要嘛就通通不要有開發工具,要嘛就基本的要裝齊全。不是每個人都是 kernel developer 好嗎?
後記:後來我們又發現,從頭到尾,我們是在 live cd 上工作,而不是在真正已經安裝在硬碟裡的 ubuntu 裡工作。難怪網路怎麼設都不會通。-.-||
- Glibc 就 glibc,好好的把自己叫做 libc 幹什麼?全天下又不是只有一個 libc。 ↩



21 Comments
其實, ubuntu有很多package集包...
你這個case, 不太介懷磁碟空間的話, 可以 install build-essential . 安裝過後應該就基本都不缺
另外, apt 的search是 apt-cache , example:
apt-cache search stdio
你這種問題就算把 ubuntu 換成其它 linux 名字都一樣, 並不是 ubuntu 難用, 還沒會走路就想學飛, 當然會一路碰壁囉
search:
apt-cache search libc
U***tu這套distro相當不developer-friendly阿 給正妹用的(戰)
看來 Linux 有希望了。
期待那天會有正妹來戰我,那 Linux 就成功了。
debian 下應該沒有這個問題吧。裝 gcc 或 g++ 肯定會有相應的庫包。另外,apt-cache search 加 -n 會比較快一點,這樣只搜索包名。
apt-get install build-essential
標題相當嚇人... 感覺不是 Ubuntu 的錯,是你們程度太弱。
年資不代表能力,去仔細看看人家的設計哲學,而不是自己不會用,就說東西爛。開F1嫌沒空調、座位小,只會被笑無知。
若跳過 apt, 試試 rpm 系列,以你們的程度,我相信會超過半小時。
apt-cache 命名並不奇怪,是從下載到本機的檔案裡面做為search 的資料來源,不會連網。
Jimmy,
對不起,我程度不夠好,這個設計哲學學得很差。
能否請較一下,系統預設有 gcc 但沒 libc 的設計準則是什麼?有公開的設計準則文件可供我參考參考嗎?
-- jeffhung
jeffhung,
相關規範請見 Debian Policy[1],讀了文件,libc6-dev 是 gcc 的 Recommends 的原因應該不言自明。
你可以用 apt-get --install-recommends install gcc 來裝相關的套件,新手狀態很好用。此選項在 synaptic 或 aptitude 中亦可使用。
這其實是系統熟稔度的問題,Ubuntu 的使用年資是 0 跟程式設計年資一點關係都沒有嘛,標題其實太凶狠了一點。:-)
[1] http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
-Rex
Rex,
libc6-dev 是 gcc 的 recommends,我可以同意,因為使用 gcc 不必然一定得搭配 libc6-dev。不過,依據您這個規範,recommends 的定義為:
那 ubuntu 9.04 預設安裝時,gcc 與 libc6-dev 沒有一起被安裝進去,表示 ubuntu 9.04 的預設安裝是 unusual installation 囉?
我還是認為,這與系統熟稔度關係不大。我以前用 linux 也不會發生有 gcc 的系統沒有 libc-dev 可用的情況啊。
一個系統的預設安裝狀態,也就是設計來給最適合大多數人啟始使用的狀態,居然是 unusual installation,這點頗令人費解,因而令我覺得難用。
-- jeffhung
jeffhung,
應該說軟體套件安裝的預設值設定不良,Recommends 應該預設開啟,方便新手使用,真的很不滿可以去 Launchpad 上發一則 wish report. 造福一下其他新手。
我自己 (一個使用 Linux 十年的新手) 的習慣,是不願意預設裝許多其實不一定需要的軟體,自己甚至連 suggested 都不願裝,下載跟空間都是成本嘛。「大多人」其實是很主觀的形容,不好判斷,用 netbook 的是否大多數人、或者用 desktop 的是否大多數人、軟體開發者是否大多數人、核心開發者是否大多數人,在在影響不同的偏好與預設設定。不過重點是,基礎平台與功能都已經設計,只是偏好設定的問題。:-)
-Rex
Rex,
要不要換到 FreeBSD 來?:-p
我覺得關鍵在「together」這個字。我可以接受預設沒有 gcc 也沒有 libc-dev,或是預設有 gcc 以及 libc-dev。但是,預設有 gcc 卻沒有 libc-dev,就是...怪怪的。
所以這篇其實是個 WTF。
-- jeffhung
jeffhung,
同意 Software sucks 這件事情,但是若我換去 FreeBSD (含 userland, package mangaement) 大概會聽到更多幹譙聲吧,哈哈。這不會代表 FreeBSD 比較差吧,好歹我也玩過不同 PC/Mobile 平台的各式程式設計環境阿。
介意我繼續用 Debian + Freebsd 嗎? 嘻嘻
http://people.debian.org.tw/~chihchun/2008/09/02/bits-from-the-gnukfreebsd-porters/
-Rex
我也覺得是系統熟悉度的問題。
今天如果是 FreeBSD 我或許連安裝 gcc 都要找半天文件。
不過如果有個習慣在 FreeBSD 開發的朋友在旁,或許他就可以教我 ports 怎麼用。
相同的如果這個時候你有個習慣用 Ubuntu 開發的朋友在旁,他就會跟你說要下
apt-get install build-essential
在沒有人說的情況之下,要怎麼知道「build-essential」這個字眼?用 gcc、libc 之類的 keyword,可以找到「build-essential」嗎?
其實我不了解你們的ubuntu發生了什麼事
我用9.04 liveUSB開機進去
hello world是可以compile也可以run的啊!?
沒有動過任何系統設定也沒裝任何軟體就可以work
我看著上面的討論愈看愈奇怪
我不知道build-essential這個字眼也不知道libc6-dev這個套件, 但我己經在ubuntu上寫程式幾個月了
為了證實我不是無意中灌了這些東西, 用LiveUSB開一個乾淨的ubuntu, 一進去就只打個純文字文件, 開terminal->gcc hello.c->./a.out, 完全沒有問題的印出來了
那, 上面的討論到底是怎麼回事呢?
我的版本是官網下載的ubuntu-9.04-desktop-i386.iso, 用unetbootin作成LiveUSB
重點只是「非常不容易」上手 =﹍=
9.10 連裝個ADSL還要更新(重點是一開始就連不上要怎樣更新囧...誰會知道pppoeconf這種指令呢?除非先用別的OS爬文)
ubuntu說真的只適合專業人員吧..我不相信連音樂轉檔都不會的人們還有時間去懂得什麼叫做編譯源碼= =
用久當然習慣啊?
但是設定部份真的很麻煩= =
唯一的好處就是一定正版
UBUNTU DESKTOP真的不見得可以讓人輕鬆用
更新一下PIDGIN還要輸入指令="= 唉
只能說是老人心態了,跟我一樣。
Ubuntu 真難用 , 要不要改用
(1) Solaris
(2) SuSe
(3) Debian
(4) Mandriva
(5) Fedora
(6) Gentoo
另外:
>>兩個工作資歷加起來超過 15 年,
>>可跨 UNIX/Windows 開發軟體的工程師
那你們之前用的是那一版本的 Unix ? Solaris ? AIX ?
為何不繼續用你們用過得 Unix ?
Post a Comment