Forum: D Programlama Dili RSS
D de Hata Mesajları Yeterli Mi ?
Sayfa:  1  2  sonraki 
canalpay (Moderatör) #1
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: D de Hata Mesajları Yeterli Mi ?
Projemde çalıştırıldığı dizindeki kur damı adlı dizine geçip ordaki dosyayı okutturacaktım. Ama proje nerede çalıştığını algılatamadığım için bende çalıştığı an kur damına girdirdirip oradan gerekli dosyayı proje dizinine taşıyıp açıp kapattığımızda tekrar kur damına taşıttırmak istiyordum. Ama anlamadığım bir sorunla karşılaştım.

dkurucu.o: In function `_D3std5stdio4File17LockingTextWriter10__T3putTwZ3putMFwZv':
işlevler/taşı.d:(.text._D3std5stdio4File17LockingTextWriter10__T3putTwZ3putMFwZv+0x61): undefined reference to `_D3std3utf6toUTF8FJG4awZAa'
dkurucu.o: In function `_D3std6format10FormatInfo14__T5parseTAxaZ5parseFKAxaZS3std6format10FormatInfo':
işlevler/taşı.d:(.text._D3std6format10FormatInfo14__T5parseTAxaZ5parseFKAxaZS3std6format10FormatInfo+0x24d): undefined reference to `_D3std5ctype7isdigitFNawZi'
işlevler/taşı.d:(.text._D3std6format10FormatInfo14__T5parseTAxaZ5parseFKAxaZS3std6format10FormatInfo+0x446): undefined reference to `_D3std5ctype7isdigitFNawZi'
işlevler/taşı.d:(.text._D3std6format10FormatInfo14__T5parseTAxaZ5parseFKAxaZS3std6format10FormatInfo+0x59d): undefined reference to `_D3std5ctype7isdigitFNawZi'
dkurucu.o: In function `_D9işlevler3aç3açFZv':
işlevler/taşı.d:(.text._D9işlevler3aç3açFZv+0x141): undefined reference to `_D3std5stdio4File6__dtorMFZv'
dkurucu.o: In function `_D9işlevler8oluştur13dosyaOluşturFZv':
işlevler/taşı.d:(.text._D9işlevler8oluştur13dosyaOluşturFZv+0x2ff): undefined reference to `_D3std5stdio4File6__dtorMFZv'
işlevler/taşı.d:(.text._D9işlevler8oluştur13dosyaOluşturFZv+0x30d): undefined reference to `_D3std5stdio4File6__dtorMFZv'
collect2: ld returned 1 exit status
--- errorlevel 1

Sizce bu Mesajda anlatılmak istenen anlaşılıyor mu ? Belki pythonda filan alıştığım için böyle bir hata kodu bana ne dediğini açıklamıyor hatta kendisi de ne olduğunu anlamamış sandırıyor
Bu mesaj acehreli tarafından değiştirildi; zaman: 2009-11-12, 13:00.
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
(Mesajını 'code=z' diye değiştirdim; satırların sonları kırpılıyordu.)

Haklısın... :) Ama aslında hatalar bağlayıcıdan geliyor.

O mesajlardan anlaşılan "undefined reference", bazı işlevlerin tanımlarının bulunamadığını söylüyor. Örneğin /usr/lib/libphobos2.a bulunmayabilir veya eski derleyicininki olabilir...

Hata mesajları, "işlev yükleme" (overloading) olanağının bir yan etkisi. C'de kütüphane içlerinde işlevlerin isimleri başlarına eklenen bir altçizgi karakteriyle dururlar: _foo gibi...

C++'ta ise foo() gibi bir işlevin birden çok yüklenmiş hali bulunabilir:

void foo(int);
void foo(double);
...

Kütüphane içinde ayırt edilebilsinler diye derleyici bu işlevlere değişik isimler vermek zorundadır. İşin içine isim alanları filan da giriyor tabii...

Gördüğün garip isimler bunun bir sonucu. C++'ta olan, D'de aynen devam ediyor.

Bunun için bir şey yapılabilir belki ama hata mesajları aslında bağlayıcıdan geliyor. Bir Linux ortamında o ortamın bağlayıcısı kullanıldığı için, bu kötü etkiyle yaşamaz zorundayız... Daha doğrusu, D derleyicisi bir şey yapamaz...

Ali
canalpay (Moderatör) #3
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Evet dediğiniz gibi linux'ta sorun varmış. Her programda aynı hatayı veriyor. Şimdi windows'da derlediğimde yazdığım program turp gibi sapasağlam gözüküyor.

Acaba neden böyle oluyor. Sorun phobos kütüphanesinde gözükmüyor. Çünkü writeln() gibi phobos kütüphanesinin işlevlerini çalıştırıyor diye hatırlıyorum. Ama emir gibi tanımladığım modüllerin işlevlerini tanımıyor. Acaba kodda mı yanlışlık var diye düşündüğümde de hem dmd hata vermiyor hem de windows'ta çalışıyor.

Sanırım bu sorun linux'ta olduğu için linux forumlarında sor diyeceksiniz ama bilgisiz olduğum için sorunumu nasıl anlatacağımı bilmiyorum. Herhalde;  "bağlayıcılarda sorunum var nedenini bilmediğim bir şekilde yazdığım işlevler için tanımlanamadı diye hata kodları veriyor. Ama kodlarımda hata yok çünkü başka platformlarda sağlıklı çalışıyor. Sorunum ne olabilir ? " diye soracağım. Sizin bildiğiniz iyi bir linux forumu var mı ?
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bu sorunu yaşayan küçük bir program oluşturabiliyor musun? Birden fazla .d dosyası kullanınca mı oluyor? Program oluşturulurken kullanılan komutlar neler? Örneğin dmd satırında ne var?

/etc/dmd.conf dosyasının da önemi olduğunu biliyorum. Acaba o nasıl?

Kim bilir belki de gerçekten dmd hatasıdır. Ama yine de emin olmak isterim... :)

Ali
canalpay (Moderatör) #5
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
evet merhaba dünya yazısını bile çıkartamıyormuşum da haberim yokmuş. merhaba dünya programında verilen hata :
deneme.o: In function `_D3std5stdio4File17LockingTextWriter10__T3putTwZ3putMFwZv':
deneme.d:(.text._D3std5stdio4File17LockingTextWriter10__T3putTwZ3putMFwZv+0x61): undefined reference to `_D3std3utf6toUTF8FJG4awZAa'
deneme.o: In function `_D3std6format10FormatInfo14__T5parseTAxaZ5parseFKAxaZS3std6format10FormatInfo':
deneme.d:(.text._D3std6format10FormatInfo14__T5parseTAxaZ5parseFKAxaZS3std6format10FormatInfo+0x24d): undefined reference to `_D3std5ctype7isdigitFNawZi'
deneme.d:(.text._D3std6format10FormatInfo14__T5parseTAxaZ5parseFKAxaZS3std6format10FormatInfo+0x446): undefined reference to `_D3std5ctype7isdigitFNawZi'
deneme.d:(.text._D3std6format10FormatInfo14__T5parseTAxaZ5parseFKAxaZS3std6format10FormatInfo+0x59d): undefined reference to `_D3std5ctype7isdigitFNawZi'
collect2: ld returned 1 exit status
--- errorlevel 1

dmd.conf :

[Environment]

DFLAGS=-I%@P%/../../src/phobos -I%@P%/../../src/druntime/import -L-L%@P%/../lib


Bence kullanıcı hatası çıkacak :-)
acehreli (Moderatör) #6
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
O zaman herhalde kurulumda bir sorun var. Kurma adımlarını bir kere daha tekrarlar mısın...

'which' komutuyla hangi dmd'nin kullanıldığını öğrenip sonra onun sürümüne bakabilirsin:

$ which dmd
~/dmd/linux/bin/dmd
$ ~/dmd/linux/bin/dmd
Digital Mars D Compiler v2.036
...

Belki bir fikir verir. (?)

Ali
canalpay (Moderatör) #7
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Her şey doğru. Bir de tamamen yeniden kurulum yapmadım ama dmd dizinini silip tekrar indirip kurmuştum. Yarın en baştan kurarım.

Bir de acaba siz hangi linux dağıtımını kullanıyorsunuz. Eğer uzmanlık gerektirmeyecek bir dağıtımsa dağıtımımı değiştirme vaktim gelmiştir :-) Hele paketi bolsa durmam geçerim :-)
acehreli (Moderatör) #8
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Çalıştığım firmanın (Riverbed) ürünü CentOS üzerinde çalıştığı için bende de o var. CentOS, RedHat'in ücretsiz olanı gibi bir şey...

Linux seçimi zor konu... :) Evde güçsüz bir bilgisayarda da xubuntu var.

Ali
canalpay (Moderatör) #9
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
Linux seçimi zor konu... :)

Evet zor konu ama linux'u cd'ye yazma konusu daha da zor. Ubuntuyu indirdim, pardusta k3b aracılığıyla yazdım. Cd hatalı çıktı. Baktım yanlış mı indirdim diye md5 doğru çıktı. Ben de k3b'nin iso dosyasını cd'ye çok kere yanlış yazdığını duydum. Bari windowsta yazayım dedim. Yavaş yazdırdım nero hata ile karşılaşmadıkta dedi. Sonra yeniden başlattım ve yine hatalı. Ama korsan windows yazdırsanız böyle bir hata başınıza gelmez :-D

Bende bari pardus'un sorununu halledeyim dedim. Yeniden kurayım dedim. Sonra baktım kurmakla uğraşılmaz kütüphane sorunu var bende kütüphane'yi kopyalatayım dedim. Ve oldu çalışıyor.

Bu sürede bende D'yi nedense biraz daha sevdim :-) Ama windowsta türkçe karakter yazdıramamam beni üzdü. Her ne kadar hata windowstan olsada (Herhalde öğledir :-) ) python'un filan sağlam çalışmasından ve windows'ta sağlam çalışmamasından dolayı üzüldüm.
acehreli (Moderatör) #10
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Windows'da Türkçe karakter olayını çözdük sanmıştık... :) Şu yaptıklarımız işe yarıyor mu:

  http://ddili.org/forum/post/8

Ali
canalpay (Moderatör) #11
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yok sorunum dosya yazıp okurken Türkçe karakterleri yazıp okutturamamam. Daha doğrusu daha okuma işine gelemedim çünkü yazarken sorun oluşturuyor. Bomlu yazayım dediğimde ise yazarken döngüyü sonsuzlaştırmış oluyor. Belki ben yanlış yazmışımdır. Ben sadece pythonda(ve diğer bildiğim yorumlamalı dillerin) direk hatasız türkçe dosya kaydetmesine karşın -belki windows'un hatası olsa da- üzüldüm.

Onu ileride düzelteceğim. Şimdilik hedefim linux olacak. Ama programı tasarlarken iki işletim sistemine uyacak şekilde tasarlayacağım. Sonra windowsa geçip programın hatalarına bakıp hataları düzelteceğim.
canalpay (Moderatör) #12
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Evet uzun zaman sonra bu konuyu canlandırdım.

Sorun şu :
dmd ezberletici.d dkv/dkvG.d dkv/bilgi.d dkv/dkvB.d
ezberletici.o:(.data+0x24): undefined reference to `_D8oluştur12__ModuleInfoZ'
ezberletici.o: In function `_Dmain':
dkv/dkvB.d:(.text._Dmain+0x91): undefined reference to `_D8oluştur6girişFZv'
collect2: ld returned 1 exit status
--- errorlevel 1
make: *** [derle] Hata 1

Burdaki hatanın farkındayım. "undefined reference to `_D8oluştur12__ModuleInfoZ'" yani oluştur.d derlemek için kullanılan koda eklenmemiş. Evet çok iyi ama bu hata neden derleyiciden gelmiyorda bağlayıcıdan geliyor ?

Derleyicinin import oluştur; kod parçacığının doğru çalışması için konsol satırına gerekli şey eklemediğim için hata vermesini beklerdim. Hadi olmadı kodumda oluştur.d'de tanımlanıp ana bölümde çağrılan işlev var. Eğer oluştur.d'yi eklemediysem giriş() işlevi tanımsız olmalı. O zaman niye giriş() işlevi tanımsız diye hata vermiyor?

Bence bu bağlayıcıdan önce derleyici hata vermesi gerekir.  Derleyici hata vermediği için 2 saat hata nerede diye aradım.

Sizce neden derleyici derliyorda bağlayıcı hata veriyor ? Derleyici böyle bir kodu nasıl derleyebilir ? Hiç bir şeyden haberi yok mu ?
acehreli (Moderatör) #13
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
bu hata neden derleyiciden gelmiyorda bağlayıcıdan geliyor ?

Derleme, program parçalarını oluşturur. Yazım hataları olmadığı sürece, ve bir ismin ne olduğu bilindiği sürece derleme yeterlidir.

C ve C++'da derlemeyi memnun etmek için başlık dosyalarındaki bildirimler (declaration) kullanılır. Örnek:

int foo(double);

Derleyici, derlediği kod içinde bir foo çağrısı gördüğünde, onu "burada foo işlevi çağrılacak" olarak derler.

Bağlayıcı da derlenen bütün kodları bir araya getirerek programı oluşturur. Aslında bağlama, yakın bir zaman önce Walter Bright'ın forumlardan birisinde anlattığı gibi, derlenen program parçalarını (object files) uç uca eklemek kadar basit bir işlemmiş. Demek ki "burada foo işlevi çağrılacak" bilgisi ile foo işlevinin adresinin bağlanması, belki de programı başlatırken işletim sistemi tarafından hallediliyor. (Emin değilim. Belki KUTALMIS düzeltir... :))

D'de de modül dosyalarında bütün tanımların bulunmaları gerekmediğini öğrenmiştik. Şu konuda hatırlamıştık:

  http://ddili.org/forum/thread/231

Tanımların el altında bulunmaları gerekmediği için, derleyici eksik tanım için şikayet edemez.

Derleyici bazı durumlarda, işlevleri çağrıldıkları yere gömebilir ("inline" olarak derleyebilir). Buna eniyileştirme seçenekleri veya kendi kafasına göre karar verebilir. Bunun nedeni, her işlev çağrısının bir bedeli olması ve özellikle küçük veya hızlı işlevlerde bu bedelin fazla kaçabileceğidir. Öyle olduğunda bağlanacak bir işlev olmadığı için bağlayıcının hatası da oluşmaz.

Ali
canalpay (Moderatör) #14
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #12
Sanırım hata bende. Çünkü konsoldan ne türlü hata çıktısı verilirse verilirsin anlayamıyorum:

dmd ezberletici.d dkv/dkvG.d dkv/bilgi.d oluştur.d dkv/dkvB.d
oluştur.d(5): Error: non-constant expression new dkvG
make: *** [derle] Hata 1


5.satır:
auto taban = new dkvG;
acehreli (Moderatör) #15
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Acaba hiçbir işleve dahil olmadan, evrensel alanda mı yazıyorsun? Eğer gerçekten evrensel bir değişken olmasını istiyorsan, modülün static this() bloğunda ilklemek gerekir:

dkvG temp;
 
static this()
{
    temp = new dkvG;
}

Bir Google aramasıyla emin oldum ama asıl şüphelendiren, "non-constant expression" kısmıydı... Sabit olmayan ifadelerle ilklenmek, evrensel sabitler için bir sorundur. Onu biliyordum. Örneğin şu çalışır:

int i = 42;

Ama sağ tarafta çalışma zamanında çalışması gereken bir ifade varsa, derleme zamanında işletilemez.

Öte yandan, D'nin derleme zamanında işlev işletebilme olanağı (CTFE - compile time function evaluation) bu konuda da yardımcı olabilmeli ama ne zaman olabildiğinden emin değilim...

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Sayfa:  1  2  sonraki 
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-18, 22:33:31 (UTC -08:00)