Merhaba,
aynı durum bende de mevcut.
lrwxrwxrwx 1 root root 7 2005-06-27 20:00 gcc -> gcc-3.4
-rwxr-xr-x 1 root root 93608 2005-06-01 00:53 gcc-3.3
-rwxr-xr-x 1 root root 98280 2005-05-07 15:11 gcc-3.4
bende bir ara sistemimde iki gcc sürümünün bulunmasının bir problem
yaratıp yaratmayacağını düşünmüştüm. amd64 sürüm kullanıyorum, temel
sistemde kurulan gcc-3.3. ama ne zamanki nvidia'nın sürücülerini
yüklemeye çalıştığımda, sürücü gcc-3.4'ün kurulmasını istedi. bende
gcc-3.4'ü kurup gcc-3.4'ü gcc'ye bağlamıştım. aslında i386 ve diğer
mimarilerde bilmiyorum problem yaratır mı ama amd64 mimarisi için şöyle
bir durum mevcut. amd64 portunda sid, etch gibi depoların üstünde yer
alan pure64, pure64-3.4 gibi birkaç versiyon mevcut(yani en azından
birkaç ay öncesine kadar vardı :), şimdi
debian-amd64.alioth.debian.org'a baktım, orada sadece pure64 var).
pure64-3.4 pure64'e göre daha deneysel ve sanırım gcc-3.4 ile derlenmiş
paketlerden oluşuyor. hatırladığım kadarıyla debian-amd64 listesine
gelen bazı sorulara gelen cevaplarda bu iki versiyona ait depoları da
sources.list'e eklemenin ve iki depodan melez bir sistem oluşturmanın,
sistemin kararlığı açısından iyi olmadığı söyleniyordu. belki benzeri
durumlar diğer mimarilerde de oluşabilir.
Recai Oktas yazmış:
Merhaba,
* özgür uncuoğlu [2005-07-01 00:45:18+0300]
mail:~# dpkg --list | grep gcc
ii gcc 3.3.5-3 The GNU C compiler
ii gcc-2.95 2.95.4-22 The GNU C compiler
ii gcc-3.3 3.3.5-13 The GNU C compiler
ii gcc-3.3-base 3.3.5-13 The GNU Compiler Collection (base package)
ii libgcc1 3.4.3-13 GCC support library
sistemde iki versiyon gcc olması program derlerken sorun olurmu?konu
hakkında pek bilgi sahibi değilim.bu yüzden tuhaf olabilir bu soru :-)
Bilakis guzel bir soru, dilim dondugunce anlatmaya calisayim. :-)
Bir Debian paketinin pismemis kaynak halinden, pismis halde sisteminize
kurulmasi surecini iki alt surece ayristirabiliriz (bu sorunun daha iyi
yanitlanabilmesi icin): (1) Paketin insa edilmesi ("build"), (2) Insa
edilmis paketin kurulmasi ("install"). Her iki eylemin de dogru sekilde
gerceklesmesi icin bazi "bagimlilik" sartlarinin saglanmasi gerekiyor.
Bunlardan ilkiyle ilgili olan bagimliliklara "Build-Depends", digerine
ise sadece "Depends" diyoruz. Tipik bir Debian kullanicisi icin onemli
olan bu ikinci tur bagimlilik, tabii APT'in sihiri sayesinde onu bile
hissetmezsiniz.
Kurulum bagimliliklariyla ilgili bir ozellik var. Bir paketin "temel
paketler" ("essential packages") dedigimiz olmazsa olmaz islevler sunan
paketler icin (grep, sed vb.) bagimlilik bildirmesi gerekmez. Benzer
bir durum "insa bagimliliklari" icin de soz konusu. Bazi paketler var,
bunlara "Build-essentials" diyoruz. Bu paketleri insa bagimliliklarinda
listelemek _gerekmiyor_. Peki bu "insa temeli" olan paketler neler, gcc
de bunlar icinde mi?
# Once 'apt-get install build-essentials' gerekir. Paket
# derlemeyecekseniz bunu kurarak sisteminizi sisirmeyin.
grep '^g\(cc\|\+\+\)' /usr/share/doc/build-essential/list
gcc (>= 3:3.3)
g++ (>= 3:3.3)
Goruldugu gibi gcc acik bir surum sarti bildirilerek build-essential
olarak tanimlanmis. Surum sartlari hemen hemen daima onemli bir
problemi onlemeye yonelik olarak bildirilir: ABI (Application Binary
Intercase) uyumsuzlugu. Cok kabaca anlatacak olursam, derleyicinin
urettigi ikilik dosyada islevlerin dahili isimlerinin olusturulmasi,
yani "name mangling" yonteminin degistirilmesi tipik bir ABI degisimidir
(bu bir ornek sadece, bunun disinda durumlar da var).
C ABI'sinin (en azindan i386'da) uzun bir zamandir kararli oldugunu
soyleyebiliriz. Ama C++ ABI'si degisebiliyor ve boyle bir degisim
oldugunda mecburen butun paketleri yeni g++'la ile bastan derlemek
gerekiyor. Debian'da bu tur durumlar "migration" denilen bir sureci
tetikler.
Yukaridaki aciklama soruyu daha genis bir perspektiften (biraz daginik
sekilde) ele aliyor. Daha da daginik bir aciklama yapmaya calisayim.
:-) 'usr/bin/gcc' bir simgesel bagdir ve kendisi de esas itibariyla
(bildirdigi bagimliklarla dogru surumu kurmak icin hazirlanan) bir
"simgesel" paket olan 'gcc' paketi tarafindan saglanir. Olagan bir
senaryoda paketi insa eden Makefile bu derleyiciyi zaten acik halde
cagirmak yerine $(CC) olarak cagiracaktir. Taslarin yerine oturmasi
icin bir kac komut ciktisi:
apt-cache depends gcc | grep Depends
Depends: cpp
Depends: gcc-3.3
Depends: cpp-3.3
ls -l /usr/bin/gcc
lrwxrwxrwx 1 root root 7 Aug 6 2004 /usr/bin/gcc -> gcc-3.3
update-alternatives --display cc
cc - status is auto.
link currently points to /usr/bin/gcc
...
Ozellikle yukarida isaret ettigim ABI degisimleri suresince ve/veya bazi
donanim mimarilerinde olusabilecek uyumsuzluk sorunlarini onlemek icin
bazi paketler gcc'nin belirli bir surumunu sart kosabilir. Ama bu cok
rastlanilir bir durum degildir.
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]