Simon! Ben nasıl hissettiğini biliyorum; Ben de Linux öğrenmenin bu kısmı ile mücadele ettim. Kendi deneyimlerime dayanarak, hitap ettiğiniz bazı öğeler hakkında bir öğretici yazı yazdım (çoğunlukla kendim için bir referans!): Http://easyaspy.blogspot.com/2008/12/buildinginstalling-application-from.html . Python uygulamalarının ne kadar basit bir kurulum / kurulum yapılacağı hakkındaki notumu takdir edersiniz :)
Umarım bu yardımcı olur! Ve mutlu derleme.
Tim Jones
Ubuntu Linux'ta kaynaktan uygulama yükleme / yükleme
Ubuntu depoları harika uygulamalarla doluyken, bir zamanlar veya başka bir yerde, depolarda bulunmayan (veya bir Debian paketine sahip olmayan) "olması gereken" aracına rastlamak zorundasınız. depolarda daha yeni sürüm. Ne yaparsın? Peki, uygulamayı kaynaktan derlemelisin! Endişelenme, bu göründüğü kadar karmaşık değil. Sıra dışı bir amatör olmaktan deneyimlerime dayanan bazı ipuçları! (Bu örnek için Ubuntu kullanırken, genel kavramlar, Fedora ve hatta Windows'daki Cygwin platformları gibi çoğu Unix / Linux dağıtımına uygulanabilir olmalıdır.)
Temel uygulama süreci (derleme) çoğu kaynaktan bu uygulama takip eder: configure -> compile -> install. Bunları yapmak için tipik Unix / Linux komutları: config
-> make
-> make install
. Bazı durumlarda, bunların hepsinin tek bir komutta birleştirilebileceğini gösteren web sayfalarını bile bulabilirsiniz:
$ config && make && make install
Elbette bu komut, bu adımların hiçbirinde sorun olmadığını varsayar. Eğlencenin geldiği yer burası!
Başlamak
Sisteminizde önce kaynağından bir uygulama derlenmiş değil, muhtemelen gibi bazı genel geliştirme araçları ile kurmak gerekir gcc
derleyici paketi, bazı genel başlık dosyaları (çoktan yazıldı kod olarak düşünmek yüklediğiniz program tarafından kullanılan bir başkası tarafından) ve make aracı. Neyse ki, Ubuntu'da build-essential
bunu yükleyecek bir metapaket var . Yüklemek için (veya zaten sahip olduğundan emin olun!) Terminalde şu komutu çalıştırın:
$ sudo apt-get install build-essential
Artık temel kuruma sahip olduğunuza, uygulama kaynak dosyalarını indirin ve bunları "giriş" dizininiz gibi okuma / yazma izninizin olduğu bir dizine kaydedin. Tipik olarak, bunlar ya .tar.gz
da dosya uzantısına sahip bir arşiv dosyasında olacaktır .tar.bz2
. .tar
Basitçe bir göreli dizin yapısını korur dosyaların gruplama bir "kaset arşivi", anlamına gelir. .gz
Popüler bir Unix / Linux sıkıştırma biçimidir gzip (GNU zip), kısaltmasıdır. Benzer şekilde, .bz2
gzip'ten daha yüksek sıkıştırma (daha küçük sıkıştırılmış dosya boyutu) sağlayan daha yeni bir sıkıştırma formatı olan bzip2'nin standları.
Kaynak dosyayı indirdikten sonra, bir terminal penceresi açın (Ubuntu menüsünden System Terminal) ve dosyanızı kaydettiğiniz dizine geçin. ( ~/download
Bu örnekte kullanacağım . İşte, '~' "home" dizininize bir kısayol.) Dosyaları indirilen arşiv dosyasından çıkarmak için tar komutunu kullanın:
Dosyanız bir gzip arşivi ise (örneğin, biterse .tar.gz
), aşağıdaki komutu kullanın:
$ tar -zxvf filename.tar.gz
Dosyanız bir bzip2 arşivi ise (örneğin, biterse .tar.bz2
), aşağıdaki komutu kullanın:
$ tar -jxvf filename.tar.gz
İpucu: Arşiv çıkarmak için tüm komut satırı anahtarlarını hatırlamak istemiyorsanız, bu yardımcı programlardan birini (veya her ikisini) almanızı öneririz: dtrx (en sevdiğim!) Veya deco (daha popüler). Bu yardımcı programlardan herhangi biriyle, yardımcı programın adını (dtrx veya deco) ve dosya adını girersiniz, geri kalan her şeyi yapar. Bunların her ikisi de, karşılaşmanız muhtemel olan tüm arşiv formatlarının çoğunun nasıl kullanılacağını "bilir".
Kaynağından oluştururken, karşılaşmanız muhtemel olan iki yaygın hata türü vardır:
- Kurulumunuza özgü bir makefile oluşturmak için konfigürasyon betiğini (genellikle config veya configure olarak adlandırılır) çalıştırdığınızda yapılandırma hataları oluşur.
- Make komutunu çalıştırdığınızda (makefile oluşturulduktan sonra) derleyici hataları oluşur ve derleyici ihtiyacı olan bazı kodları bulamaz.
Bunların her birine bakacağız ve nasıl çözüleceğini tartışacağız.
Yapılandırma ve Yapılandırma Hataları
Kaynak kod arşiv dosyasını çıkardıktan sonra, terminalde, çıkarılan dosyaları içeren dizine geçmelisiniz. Genelde, bu dizin adı, dosyanın adıyla aynı olur ( .tar.gz
veya .tar.bz2
uzantısı olmadan ). Ancak, bazen dizin adı herhangi bir sürüm bilgisi olmadan uygulamanın adıdır.
Kaynak dizinde bir README
dosyayı ve / veya dosyayı arayın INSTALL
(veya benzer adlara sahip bir şey). Bu dosyalar tipik olarak, bağımlılıklar hakkında bilgiler de dahil olmak üzere uygulamanın nasıl derleneceği / derleneceği ve yükleneceği hakkında faydalı bilgiler içerir. "Bağımlılıklar", başarılı bir şekilde derlenmesi gereken diğer bileşenler veya kütüphaneler için süslü bir addır.
Okumak bıraktıktan sonra README
ve / veya INSTALL
bir yürütülebilir için göz (umarım uygulama için tüm ilgili çevrimiçi belgelerine bakıp,) dosyası adlı dosya (dosya üzerinde "x" izni setine sahiptir) config
veya configure
. Bazen dosyanın .sh
(örneğin, config.sh
) gibi bir uzantısı olabilir . Bu genellikle derlemek için bir "aklı başında" ortamınız olduğunu doğrulamak için diğer bazı yardımcı programları çalıştıran bir kabuk betiğidir. Başka bir deyişle, ihtiyacınız olan her şeyin kurulu olduğundan emin olmak için kontrol edecektir.
İpucu: Bu bir yapılandırma dosyası yerine Python tabanlı bir uygulama ise, adlı bir dosya bulmalısınız setup.py
. Python uygulamaları genellikle kurulumu çok basittir. Bu uygulamayı kurmak için root olarak (örneğin, Ubuntu altındaki aşağıdaki komutun önüne sudo koyun) bu komutu çalıştırın:
$ python setup.py install
Yapmanız gereken tek şey bu olmalı. Bu eğitimin geri kalanını atlayabilir ve uygulamanızı kullanmaya ve keyfini çıkarmaya doğrudan devam edebilirsiniz.
Yapılandırma komut dosyasını terminalde çalıştırın. Genelde, yapılandırma komut dosyanızı normal kullanıcı hesabınızla çalıştırabilirsiniz (ve gerekir!).
$ ./config
Komut size ne yaptığı hakkında bir fikir vermek için bazı mesajlar gösterecektir. Genellikle, komut dosyası başarılı veya başarısız olup olmadığını ve başarısız olursa, hatanın nedeni hakkında bazı bilgiler verir. Herhangi bir hata mesajı almazsanız, genellikle her şeyin yolunda gittiğini varsayabilirsiniz.
Bir yapılandırma betiğine benzeyen bir komut dosyası bulamazsanız, bu genellikle uygulamanın çok basit olduğu ve platformdan bağımsız olduğu anlamına gelir. Bu, sağlanan derleme adımına atlayabileceğiniz anlamına gelir, çünkü sağlanan Makefile
herhangi bir sistemde çalışmalıdır.
Bir örnek
Bu derste, başvurunuzu oluştururken karşılaşabileceğiniz hata türlerine örnek olarak Newsbeuter adlı metin tabanlı RSS okuyucuyu kullanacağım. Newsbeuter için, yapılandırma betiğinin adı config.sh
. Sistemimde çalıştırdığımda config.sh
aşağıdaki hatalar meydana geliyor:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ ./config.sh
Checking for package sqlite3... not found
You need package sqlite3 in order to compile this program.
Please make sure it is installed.
Biraz araştırma yaptıktan sonra, sqlite3
uygulamanın kurulduğunu öğrendim . Ancak, kaynaktan inşa etmeye çalıştığım için, bu config.sh
aslında aradığı şey için geliştirme kütüphaneleri (başlıkları) sqlite3
. Ubuntu'da çoğu paketin içinde biten bir ilişkili geliştirme karşı paketi vardır -dev
. (Fedora gibi diğer platformlar genellikle -devel
geliştirme paketleri için bir paket soneki kullanır .)
sqlite3
Geliştirme paketi için uygun paketi bulmak için , apt-cache
yardımcı programı Ubuntu'da (ve benzer şekilde, yum
Fedora'daki yardımcı programı) kullanabiliriz:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-cache search sqlite
Bu komut oldukça büyük bir sonuç listesi döndürür, bu nedenle hangisinin uygun paket olduğunu belirlemek için bir takım dedektiflik çalışmaları yapmalıyız. Bu durumda uygun paket olduğu ortaya çıkıyor libsqlite3-dev
. Bazen aradığımız lib
paketin aynı paket adı yerine öneki olacağına dikkat edin -dev
. Bunun nedeni, bazen sadece birçok farklı uygulama tarafından kullanılabilecek paylaşılan bir kütüphane arıyoruz. Yüklemek için libsqlite3-dev
, terminaldeki tipik apt-get install komutunu çalıştırın:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-get install libsqlite3-dev
Şimdi, config.sh
bu bağımlılık problemini çözdüğümüzden ve daha fazla bağımlılık problemimiz olmadığından emin olmak için tekrar koşmalıyız. (Burada göstermeyeceğim halde, Newsbeuter durumunda, libcurl4-openssl-dev
paketi de kurmak zorunda kaldım .) Ayrıca, bir geliştirme paketi (gibi libsqlite3-dev
) yüklerseniz ve ilişkili uygulama paketi de (örneğin, sqlite3
) değil önceden kuruluysa, çoğu sistem ilişkili uygulama paketini aynı anda otomatik olarak kurar.
Yapılandırma başarılı bir şekilde çalıştığında, sonuç bir veya daha fazla make dosyası yaratacağı şeklinde olacaktır. Bu dosyalar genellikle adlandırılır Makefile
(Unix / Linux'ta dosya adı durumunun önemli olduğunu unutmayın!). Derleme paketi src
, vb. Gibi alt dizinler içeriyorsa, bu alt dizinlerin her biri bir de içerecektir Makefile
.
Yapı ve Derleme Hataları
Şimdi, uygulamayı derlemeye hazırız. Buna genellikle bina denir ve adı gerçek dünyadaki bir şeyi inşa etme sürecinden ödünç alınır. Tipik olarak çoklu kaynak kod dosyaları olan uygulamanın çeşitli "parçaları", toplam uygulamayı oluşturmak için bir araya getirilir. Make yardımcı programı, derleme işlemini yönetir ve işi gerçekten yapmak için derleyici ve bağlayıcı gibi diğer uygulamaları çağırır. Çoğu durumda, yapılandırmayı yaptığınız dizinden make (normal kullanıcı hesabınızla) yapmanız yeterlidir. (Qt kütüphanesiyle yazılmış uygulamaları derlemek gibi birkaç durumda, bunun yerine qmake gibi başka bir "sarmalayıcı" uygulaması çalıştırmanız gerekir. Yine, ayrıntılar için her zaman README
ve / veya INSTALL
belgeleri kontrol edin .)
Yukarıdaki yapılandırma komut dosyasında olduğu gibi, terminalde make (veya benzeri bir yardımcı program) çalıştırdığınızda, neyin yürütüldüğü ile ilgili herhangi bir uyarı ve hata ile ilgili bazı mesajlar görüntülenir. Genelde uygulamanın geliştiricileri için olduğu ve ihlal edilmekte olan bazı standart uygulamalar olduğunu söyledikleri için genellikle uyarıları yok sayabilirsiniz. Genellikle, bu uyarılar uygulama işlevini etkilemez. Öte yandan, derleyici hataları ile ilgilenilmesi gerekir. Newsbeuter ile koştuğum zaman, bir süre işler yolunda gitti, ama sonra bir hata yaptım:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ make
...
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/configparser.o -c src/configparser.cpp
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/colormanager.o -c src/colormanager.cpp
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:5:18: error: stfl.h: No such file or directory
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:33: error: ISO C++ forbids declaration of \u2018stfl_form\u2019 with no type
./include/stflpp.h:33: error: expected \u2018;\u2019 before \u2018*\u2019 token
./include/stflpp.h:34: error: ISO C++ forbids declaration of \u2018stfl_ipool\u2019 with no type
./include/stflpp.h:34: error: expected \u2018;\u2019 before \u2018*\u2019 token
make: *** [src/colormanager.o] Error 1
Yapma işlemi, ilk hatayla karşılaşılır karşılaşmaz duracaktır. Derleyici hatalarının ele alınması bazen zor bir iş olabilir. Sorunla ilgili bazı ipuçlarının hatalarına bakmak zorundasınız. Tipik olarak, sorun, genellikle .h
veya uzantısı olan bazı başlık dosyalarının .hpp
eksik olmasıdır. Yukarıdaki hatanın söz konusu olması durumunda, sorunun stfl.h
üstbilgi dosyasının bulunamadığıdır (ya da olmalı!) . Bu örnekte gösterildiği gibi, hata mesajının ilk satırlarına bakmak ve sorunun nedenini bulmak için aşağıya inmek istersiniz.
Newsbeuter belgelerine baktıktan sonra (başlamadan önce yapmam gereken, ancak eğitimin bu bölümü çok anlamlı olmaz!), Bunun STFL adında bir 3. parti kütüphaneye ihtiyacı olduğunu buldum. Peki bu durumda ne yapacağız? Aslında, bu gerekli kütüphane için aynı işlemi tekrarlıyoruz: kitaplığı elde edin ve bunun için configure-build-install işlemini yürütün ve ardından istenen uygulamayı oluşturmaya devam edin. Örneğin, STFL durumunda, libncursesw5-dev
düzgün bir şekilde yapılabilmesi için paketi kurmak zorunda kaldım . (Genellikle, başka bir gerekli uygulamayı yükledikten sonra orijinal uygulamamızdaki yapılandırma adımını yinelemek gerekli değildir, ancak hiçbir zaman da zarar vermez.)
STFL araç setini başarıyla kurduktan sonra Newsbeuter için make işlemi başarıyla gerçekleştirildi. Make işlemi tipik olarak bıraktığı yerden (hata noktasında) kalkar. Bu nedenle, başarılı bir şekilde derlenmiş herhangi bir dosya yeniden derlenmeyecektir. Her şeyi yeniden derlemek istiyorsanız, derlenmiş tüm nesneleri kaldırmak için hepsini temizle komutunu çalıştırabilir ve ardından yeniden çalıştırmayı çalıştırabilirsiniz.
yükleme
Derleme işlemi başarıyla tamamlandıktan sonra uygulamayı yüklemeye hazırsınız. Çoğu durumda, uygulamayı dosya sisteminin ortak alanlarına (örneğin, /usr/bin
veya /usr/share/bin
, vb.) Yüklemek için , yüklemeyi root olarak çalıştırmanız gerekir. Kurulum gerçekten de tüm süreçteki en basit adımdır. Takmak için, terminal çalışmasına:
$ make install
Herhangi bir hata için bu işlemin çıktısını kontrol edin. Her şey başarılı olsaydı, terminaldeki komut ismini çalıştırabiliyor olmanız gerekiyordu. (Bir GUI uygulamasıysa, komut satırının sonuna & sonuna ekleyin veya uygulama çalışmayı bitirinceye kadar terminal oturumunu kullanamazsınız.)
Kaynaktan bir uygulama oluşturduğunuzda, genellikle Ubuntu'daki GUI menülerine bir simge veya kısayol eklemez. Bunu manuel olarak eklemeniz gerekecek.
Ve bu temelde, yinelemeli olsa da, Ubuntu'da bir kaynaktan bir uygulama oluşturma ve yükleme sürecidir. Bunu birkaç kez yaptıktan sonra, sizin için ikinci doğa olacak!