- 3.1.
C ile program yazarken matematiksel işlevler kullanıyorum (sqrt, sin gibi), programımın en başında
#include <math.h>
var, fakat program derlenirken
/tmp/ccayiXgZ.o: In function `main':
/tmp/ccayiXgZ.o(.text+0x19): undefined reference to `sqrt'
şeklinde hata alıyorum, bu sorunu nasıl çözerim?
-
Yanıtlayan: Murat SULUHAN <msuluhan_linux (at) yahoo.com>
Yazılımın,
$ gcc -lm -i foobar.c -o foobar
şeklinde derlenmesi gerekiyor. -lm yönergesi derleme esnasında matematiksel kütüphaneleri de koda ekliyor.
E o zaman math.h dosyasını niye include ettik derseniz. Çünkü matematiksel işlevler kütüphane olarak ayrı duruyor ve öntanımlı derleme kütüphanelerinin içinde değil. -lm çalıştırılabilir koda libm.so'yu ekleyecek.
- 3.2.
QT kullanarak geliştirilen uygulamalar nasıl derlenir?
-
Yanıtlayan: Alper Oğuz <alper (at) eksen.net>
hello.cpp isimli QT kullanılarak yazılmış XWindow uygulamasının derlenmesi için iki ana yöntem vardır, bir tanesi el yordamı ile, diğeri Makefile oluşturup El Yordamı ile:
$ g++ -Wall -I$QTDIR/include -L$QTDIR/lib hello.cpp -o hello -lqt
Burada:
- -Wall
Bütün -w seçeneklerinin kullanılacağını belirtir.
- -I$QTDIR/include
QT başlık dosyaları için nereye bakılacağını belirtir.
- -L$QTDIR/lib
QT kütüphaneleri için nereye bakılacağını belirtir.
- hello.cpp
derlemek istediğimiz c++ kaynak dosyasinin ismi
- -o hello
derleme sonucu oluşacak dosyanın ismi
- -lqt
libqt.so dosyası ile derleme sonucu oluşacak yürütülebilir dosyanın bağlanması için.
tmake ile: (Bu yöntemi kullanabilmek için makinenizde tmake uygulamasının yüklü olması gerekmektedir.) En sevdiğiniz metin düzenleyicinizi açıp, aşağıdaki 3 satırı yazıp hello.cpp dosyanızın olduğu dizine kaydediniz.
#hello.pro dosyasi
HEADERS =
SOURCES = hello.cpp
TARGET = hello
Daha sonra konsoldan,
$ tmake hello.pro -o Makefile
komutu ile Makefile dosyanızı olşturunuz ve hello isimli yürütülebilir dosya için tekrar konsoldan
- 3.3.
PHP'de herhangi bir Web sayfasını nasıl epostayla yollayabilirim?
-
Yanıtlayan: Ergin Soysal <php-tr (at) yahoogroups.com>
- 3.4.
PHP ile girilen bir epostanın geçerli söz dizimine sahip olup olmadığını nasıl test ederim?
-
Yanıtlayan: Mesut TUNGA <php-tr (at) yahoogroups.com>
function email_kontrol ($variable) {
return (ereg('^[-!#$%&'*+\./0-9=?A-Z^_`a-z{|}~]+'. '@'.
'[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+.' . '[-!#$%&'*+\./0-9=?A-Z^_`a-z{|}~]+$',
$variable));
}
if (email_kontrol($gidecekadres)) {
mail($gidecekadres, \"Konu\", \"İleti\", \"From: [email protected]\");
} else {
echo \"Hatalı eposta adresi girdiniz...\";
}
- 3.5.
Linux'ta Xwindows için program geliştirme araçları nelerdir? Qt, GTK ne işe yarar?
-
Yanıtlayan: Enver ALTIN <ealtin (at) casdb.com>
Qt-designer sadece GUI tasarımının görsel olarak yapılmasını sağlayan (aslında derlendiğinde o ekranı gösterecek olan kodu oluşturan) bir yazılım. Qt bir dil değil, C++ kullanılarak yazılmış bir nesne kütüphanesi.
Unix bu noktada Windows'dan biraz farklı. Windows, ekrandaki button/checkbox/option button/editbox gibi birçok nesnenin neye benzemesi gerektiği konusunda kesin bir standart getiriyor ve bunların daha kolay hazırlanmasi için de sofistike, iyi tasarlanmış ve hızlı bir kütüphane ile birlikte geliyor.
Ancak Unix bu duruma biraz daha farklı bir bakış açısı getiriyor ve standart bir görünüm/programlama arabirimi getir(e)miyor ve alternatiflerin oluşmasına izin veriyor:
- Athena: XFree86 ile gelen kütüphane; eski ve yavaş ağlarda X kullanıldığında performansından dolayı çok popüler olmuş.
- Motif
- Gtk: (http://www.gtk.org/) The Gimp Tool Kit, GIMP (http://www.gimp.org/) adındaki yazılımın tasarımı için geliştirilmiş olmasına karşın GNOME (http://www.gnome.org/) projesi tarafından da kullanılan ve GPL lisansı altında dağıtılan bir kütüphane.
- Qt (cute): Troll Technologies, Inc. (http://www.trolltech.com/) tarafından C++ kullanılarak geliştirilmiş bir kütüphane. Etkin olarak KDE (http://www.kde.org/) projesi tarafından kullanılıyor.
Linux'da yazılım geliştirme birkaç farklı araç kullanılarak yapılıyor:
- Grafik arabirim tasarımı
- Kodun yazılması
- Sınama/Hata Ayıklama
gdb
strace
- Dağıtım
cvs, diff, patch, tar
- 3.6.
Qt kütüphanesini kullanarak oluşturduğum herhangi bir C++ programı nasıl derleyebilirim?
$ gcc -I/usr/lib/qt2/include -l/usr/lib/qt2/lib/libqt.so main.cpp
komutu ile derlemeye çalıştığımda,
/usr/i486-suse-linux/bin/ld: cannot find -l/usr/lib/qt2/lib/libqt.so
collect2: ld returned 1 exit status
hatasını veriyor. Acaba nerde yanlış yapıyorum?
-
Yanıtlayan: Alper Oğuz <alper (at) eksen.net>
gcc'nin parametrelerini yanlış kullandığınız için bir hata oluşuyor. -L ile -l seçeneklerini beraber kullanmaniz gerekiyor. -L seçeneği kütüphaneler için dizin göstermenizi sağlar. -l ise hangi kütüphaneyi kullanmak istediginizi belirtmek için kullanılır. Dolayısıyla ikisini beraber, aşağıdaki gibi kullanmanız sorunu çözecektir:
$ gcc -I/usr/lib/qt2/include -L/usr/lib/qt2/lib -lqt main.cpp
- 3.7.
Visual Studio, Delphi ya da C++ Builder gibi bir IDE var mı?
-
Yanıtlayan: Alper Oğuz <alper (at) eksen.net>
Birkaç seçiminiz var:
deneyebilirsiniz. Anjuta, diğerlerinden farklı olarak PHP için de komutlar, sözdizimi tamamlama ve işlev çağrı ipuçlarını destekliyor.
- 3.8.
Kylix'i çalıştırırken "Generating font matrix. Please wait... Couldn't find usable fonts for this locale" hatası veriyor. Nasıl düzeltebilirim ?
-
Sisteminizin Turkçe olmasindan kaynaklanıyor olabilir.
$ LC_ALL="en_EN" startkylix
ile deneyin.
Sisteminizde çalışır durumda bir xfs (X Yazıtipi Sunucusu) olmayabilir ya da XF86Config dosyanızda FontPath ile tanımlanmış yazıtipi dizinlerinde sorunlar olabilir.
- 3.9.
DTMF sinyallerini nasıl üretebilirim?
-
Yanıtlayan: Ragıp Özkan Konça <rkonca (at) ekinproje.com>
Bir DTMF kodlayıcı. Komut satırından girilen rakamların tonlarını /dev/dsp aygıtına yönlendirir. Aşağıda kodu verilen dtmf.c dosyasını,
ile derleyebilirsiniz.
#include <math.h>
#include <string.h>
#include <stdio.h>
#define duration 800
#define pause 400
float col[] = { 1209.0, 1336.0, 1477.0, 1633.0 };
float row[] = { 697.0, 770.0, 852.0, 941.0 };
char positions[] = "123A456B789C*0#D";
/* 8000 örnek/saniye, mono, 8 bit/örnek kabulüyle */
main(int argc, char *argv[]) {
int i;
char *ap, *cp;
float f1, f2, ri, ci;
if (argc != 2)
exit(1);
ap = argv[1];
while (*ap) {
cp = strchr(positions, *ap);
if (cp) {
ci = col[(cp - positions) % 4];
ri = row[(cp - positions) / 4];
for (f1 = 0.0, f2 = 0.0, i=3D0; i < duration;
i++, f1 += 6.28/8000.0*ri, f2 +=3D 6.28/8000.0*ci) {
putchar((sin(f1)*63.0) + (sin(f2)*63.0) + 128);
}
for (i = 0; i < pause; i++)
putchar(128);
}
ap++;
}
}