Eclipse math.h linker error

As you already know the buggy nature of the eclipse ide, there is also a bug on its linker. Actually it is not a bug only in eclipse, because the error is depend on gcc and its inability to solve math library linking after or middle of the code compilation. Let’s explain this phenomenon with an example:

Asssume that we have the following example.c code:

#include <stdio.h>
#include <math.h>
int main(void)
{
        double x = 4.0;
        double result = sqrt(x);
        printf("The square root of %lf is %lf\n", x, result);
        return 0;
}

If we compile this code in bash terminal with:

$ gcc -lm test.c -o test

we have an error as undefined reference to `sqrt‘ (or any other function that called from math.h library) Interestingly if we have a static variable inside the sqrt like ‘sqrt(12.2)’ the compiler don’t give us any error. This happens because when we give the gcc  ‘-lm‘ option, we link the libm.a and libm.so to the compiler. “.a" files are static libraries, as opposed to “.so" files which are dynamic libraries. Normally gcc looks for dynamic libraries if available unless passed -static.  In ”sqrt(12.2)” case gcc is called ‘libm.a’ and not call the function sqrt in the run time, simply assign the value to the static variable.

In bash terminal. if we compile this code with:

$ gcc test.c -o test -lm

problem would be solved for bothe cases. to to this in Eclipse:

  1. Right click on your project in Project Explorer and select Properties.
  2. Go to C\C++ Build -> Settings -> Tool Settings -> Gcc Linker -> Libraries and click on green plus button to add a new library. When the dialog pops up, write m, and Eclipse will automatically add the –Im flag.

Image

source Okumaya devam et

Ubuntu ‘da multi-touch pad’e multitouch özelliği ekleme

öncelikle mutouch driver i kuruyoruz:

sudo apt-get install xserver-xorg-input-mutouch

ardından, xorg.conf dosyasına birkaç satır bir şeyler ekleyeceğiz. öncelikle xorg.conf dosyasını açalım:

sudo gedit /etc/X11/xorg.conf

bu dosyada aşağıdaki satırları aynen kopyalayıp, oturumu yeniden başlatalım

Section “InputDevice”
Identifier “Touchpad”
Driver “microtouch
Option “Device” “/dev/input/mouse1”
EndSection

 

bir başka sorun da touchpad i istenildiği zaman açma/kapatma. onun için de buradaki çözümü uygularsanız sorununuz hallolacaktır.

ubuntu üzerinde matlab 2011 b mex ayarları

matlab 2011b için mex düzenlemeleri:

öncelikle ubuntu için matlab kurulumundaki adımları biraz kendimize yontarak gerçekleştiriyoruz. Dökümanda bahsedildiği gibi gcc-4.3.4 kullanmak şart değil. Sadece adamlar testlerini o sürümde yapmışlar, başımız ağrımasın diyorlar ;)

2. MATLAB a özel bir bin klasörü oluşturalım:

mkdir ~/.matlab/bin

3. gcc ile sistemimizde kurulu(bende 4.5) gcc-4.5 ile via MATLAB a özel bin klasörü arasında sembolik link oluşturalım.

ln -s /usr/bin/gcc-4.3 ~/.matlab/bin/gcc

4.local startup.m dosyası oluşturup, bin dosyasını $PATH değişkenine ekleyelim. böylece her çalışma öncesi bin yolu PATH a yazılmış olur:

printf “setenv(‘PATH’,sprintf(‘/home/%%s/.matlab/bin:%%s’,getenv(‘USER’),getenv(‘PATH’)));\n” >> ~/Documents/MATLAB/startup.m

/usr/local/MATLAB/R2011b/bin klasörüne gidip “mexopts.sh” dosyasını düzenleyelim:

sudo gedit /usr/local/MATLAB/R2011b/bin/mexopts.sh

bu dosyada CC=’gcc’ yi CC=’gcc-4.5′ e, CXX=’g++‘ yi CXX=’g++-4.5′, ve FC=’gfortran’ ı FC=’gfortran-4.5′ olacak şekilde değişikliklerini yapalım. Elbette bunlar bende kurulu olanlar, siz kendinizde olan derleyicilere göre değiştirebilirsiniz.

bu işlemi yaptıktan sonra kaydedip kapatalım. Ardından

sudo /usr/local/MATLAB/R2011b/bin/mex -setup

komutunu çalıştırıp bu ayarları /home klasörü altındaki ayar dosysına yazmasını sağlayalım

derleme sonrası mex şöyle bir sorunla(kısaltılmış) karşılaştı:

libstdc++.so.6: version `GLIBCXX_3.4.14′ not found (required by /usr/lib/libppl_c.so.2)
libstdc++.so.6: version `GLIBCXX_3.4.11′ not found (required by /usr/lib/libppl_c.so.2)
libstdc++.so.6: version `GLIBCXX_3.4.14′ not found (required by /usr/lib/libppl.so.7)
libstdc++.so.6: version `GLIBCXX_3.4.11′ not found (required by /usr/lib/libppl.so.7)
libstdc++.so.6: version `GLIBCXX_3.4.11′ not found (required by /usr/lib/libgmpxx.so.4)

çözümü mevcut libcstd++ kütüphanesine sembolik link oluşturmaktan geçiyor

sudo ln -s /usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5/libstdc++.so /usr/local/MATLAB/R2011b/sys/os/glnx86/libstdc++.so.6

ve finito

Ubuntuda LAN üzerindeki Yazıcılara bağlanma

UBUNTU LAN Üzerindeki Yazıcıya bağlanma(Windows)

Öncelikle Samba paketlerinin yüklü ve işlemde olup olmadığına bakıyoruz.

Sistem>Yönetim>Servis dizininde Samba folder share ve Printer Service(cupsys) bulunup bulunmadığına varsa seçili(solda onay işaretli) olmadığına bakıyoruz

Bu servisler yüklü değilse Synaptic paket yöneticisinden(Sistem>Yönetim> Synaptic paket yöneticisi) samba (CTRL+F “samba”) samba, samba-common, ve smbclient paketlerini kurulım için işaretliyor ve kuruyoruz.

Ardından paylaşılan yazıcı başka bir makinede windows kurulu bir sisteme bağlı ise: Denetim masası>yazıcı ve diğer araçlar>yüklü yazıcıları görün kısmından yazıcımızı bulup sağ tıklıyoruz bağlantı noktaları sekmesinden “çift yönlü yazma desteğini etkinleştir” yazısının yanındaki tiki kaldırıyoruz.

Artık son aşamaya geldik. Ubuntuda Sistem >Yönetim>Yazdırma seçeneğine geliyoruz.Burada “New printer” seçeneğinden windows printer via Samba sekmesine geliyoruz smb:// kutusunun yanına <Çalışma Grubu>/<yazıcının bağlı olduğu makine>/<yazıcı adı> giriyoruz. Örneğin benim ağımda 192.168.1.2 no lu makine de Xerox yazıcım bulunmakta ve çalışma alanım WORKGROUP bu durumda “smb://” den sonra yazmam gereken WORKGROUP/192.168.1.2/Xerox ve bu ağ şifre ile korunuyorsa “Authentication Required” yazısına tik koyup kullanıcı adı ve şifremizi giriyoruz. Yazıcımız kullanıma hazır.

Kaynaklar:

1. https://help.ubuntu.com/community/WindowsXPPrinter

2. https://help.ubuntu.com/community/NetworkPrintingWithUbuntu

Ubuntu Adobe Reader Kurma

Bu yazıda hem red hat package manager (.rpm uzantılı) dosyalarının ubuntunun desteklediği debian paket formuna dönüştürmeyi hem de linux üzerine adobe acrobat reader kurmayı göreceğiz.

Öncelikte Adobe ‘un sitesinden linux uyumlu Adobe Reader 8.1.2 SU1 sürümünü indiriyoruz:indir

ardından .rpm uzantılı paketi debian paket formatına dönüştüreceğiz.Bunun için öncelikle  alien programını indirmemiz gerekiyor. Bunun için:

sudo apt-get install alien

komutunu yürütüyoruz. İndirdiğimiz .rpm uzantılı dosyaların Masaüstünde olduğunu varsayalım:

cd ~/Masaüstü

sudo alien AdobeReader_enu-8.1.2_SU1-1.i486.rpm

ls komutunu ile masaüstüne bakalım:

ls adobe*

sudo alien AdobeReader_enu-8.1.2_SU1-1.i486.rpm
sudo alien AdobeReader_enu-8.1.2_SU1-1.i486.deb

artık debian paketini kurabiliriz

sudo dpkg -i AdobeReader_enu-8.1.2_SU1-1.i486.deb

kurduğumuz paketi kaldırmak istediğimiz zaman:

sudo dpkg -r  AdobeReader_enu-8.1.2_SU1-1.i486.deb

komutunu kullanabiliriz.

İşimiz bitti mi ? Henüz değil. Uçbirimden(Shell) komut ile acrobat reader ı çalıştırmak için “/usr/local/bin” dizininde belirleyeceğimiz bir dosyayı(ayrıca komut ismi olacak) “/opt/Adobe/Reader8/bin/acroread”  uygulama çalıştırma dosyasına sembolik olarak bağlayacağız. Komut ismini acrobatread olarak belirleyelim bu durumda bağlama komutu:

sudo ln -s /opt/Adobe/Reader8/bin/acroread /usr/local/bin/acrobatread

olacak.Bir diğer işlem root olmadan acrobatread komutunu shellden işletebilmek için kullanıcı izinlerini ayarlamamız gerekiyor:ayrıtılı bilgi:

okuma(r) ve çalıştırma(x) izinlerini tüm kullanıcılara verelim:

sudo chmod a+rx /opt/Adobe/Reader8/bin/acroread

sudo chmod a+rx /usr/local/bin/acrobatread

artık ya komut satırından

acrobatread  <dosya-konumu>

veya

pdf belgesine sağ tıklayıp Birlikte aç>özel komut kullan sekmesine acrobatread komutunu girdiğimizde belgemiz acrobat reader ile açılacaktır. Daha sonra istenildiği taktirde .pdf belgeleri  varsayılan olan belge görüntüleyicisiyle de açılabilir.

dipnot: Belge görüntüleyicisi yerine Acrobat reader ‘ı tercih etmemin sebebi acrobat reader pro ile yaratılan notları düzgün görüntüleyemememden dolayıdır.

Kaffeine “Audio device busy” sorunu

Kaffeine “Audio device busy” sorunu

Film izlemek için MS ortamındaki BSPlayer a Linux alternatifi bulmam gerekti. Xine bu işlerin babası ve bu tabanda yazılmış Kaffeine Player video ve audio codec leri açısından zenginliği ve altyazılar ile sorunsuz çalışmasıyla iyi bir alternatif -belki de daha iyi deneyip göreceğiz-

Ama o da ne görüntü sorunsuz akıp giderken ektanda bir hata mesajı

“Audio device busy”

Kaffeine Player da Settings> xine Engine Parameters>audio sekmesinde driver ı “auto” dan “alsa” ya çekelim. Bu auto algılama kısmında bir sorun var o kesin ;)

Ubuntu Wireless/Kablosuz Ağ Problemi

Ubuntu Wireless/Kablosuz Ağ Problemi

Linux ile ilk tanışanların yüzleştiği önemli problemlerden birisi kablosuz ağlara bağlanmak.

Burada :https://help.ubuntu.com/community/WifiDocs/WirelessTroubleShootingGuide#iwconfig

adım adım çözüm yöntemleri gösterilmiş. Sorun çok farklı nedenlerden kaynaklanabileceği( wireless sürücüsü/wireless devre kesici düğmesinin kapalı olması/yanlış ayarlar/wlan0:avahi vs.) için adımları sırasıyla izlemekte fayda var. Ancak öncelikle:

sudo apt-get update

sudo apt-get install

sudo apt-get upgrade

dizisini uyguluyoruz

Sistem>Yönetim>Ağ üzerine gelip root şifrenizle kilidi açtıktan sonra Kablosuz ağ Essid(görünen isim) girdikten(veya bulduktan) sonra configuration/yapılandırma ayarları otomatik yapılandırma(DHCP) olarak seçip ilk denemmezi yapmakta fayda var. Şayet kablosuz ağa WAP/WEP ile bağlanıyorsak -ki genelde modemler varsayılan olarak A43B28D… gibi şifre verildiği için WEP 16’lı(hexadecimal) şifreleme algoritması kullanılır – modem tarafından üretilen/veya modeme kendimizin atadığı şifrenin girilmesi gerekir. Ancak bazı sürümlerde WAP/WEP şifreleme ile ilgili yazılım sorunları olduğundan çevrede şifresiz bir ağa bağlanabiliyorsak denememizi bu ağdan yapmamız daha mantıklı olacaktır. Böylece varsa sorunu oluşturan nedene yaklaşabiliriz.Ardından shell(uygulamalar>donatılar>uçbirim) açılarak:

#sudo /etc/init.d/networking restart

komutunu vererek ağ konfigürasyonunu yeniden başlatıyoruz.

$iwconfig

komutu ile ağ durumunu görebiliriz. Örneğin bu komutun bendeki çıktısı(değerler değiştirilmiş olarak :) ):

lo        no wireless extensions.
eth0      no wireless extensions.
wmaster0  no wireless extensions.
wlan0     IEEE 802.11g  ESSID:"AirTies"  Nickname:""
Mode:Managed  Frequency:2.462 GHz  Access Point: 00:08:5D:F9:AB:19
Bit Rate=54 Mb/s   Tx-Power=27 dBm
Retry min limit:7   RTS thr:off   Fragment thr=2346 B
Power Management:off
Link Quality=100/100  Signal level=-46 dBm  Noise level=-95 dBm
Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
Tx excessive retries:0  Invalid misc:0   Missed beacon:0

şeklinde bağlantı kalitesi modemin yakınında olduğum için çok iyi ;)

Bağlantıyı sınamak için ayrıca Sistem>Yönetim>Ağ Araçları kısmında Ağ aygıtı wlan0 seçilerek modeme ping atmayı deneyebiliriz(adresi muhtemelen 192.168.1.1 vb. Olacaktır) Ping atmada sorun yaşıyorsanız(ulaşan paket sayısı 0 ise) ilk linkten faydalanarak adım adım çözüm yollarını sınaablirsiniz.

Örneğin benim öncelikle intel wireless 4965AGN kartımın sürücüsünü güncellememe gerekti

$lshw

komutuyla kablosuz ağ kart sürücüsünün doğru yüklenmediğini gördüm:

http://kuscsik.blogspot.com/2007/06/how-to-install-intel-4965-wireless.html

Ardından basit ama beni yaklaşık 1 gün uğraştıran komutu girdim

sudo ip link wlan0:avahi down

wlan0:avahi bağlantısı herşey düzgün gibi gözükmesine karşın şifreli ağa bağlanmamı engelliyordu. Bu komutla sıralamada wlan0:avahi yi wlan0 nın altına alarak bu engeli aşıldı.

Kurulum sonrası kart ilk kez tanındığında sistem kart hafızasını okumak ister ve bu zaman zaman sistemin kilitlenmesine neden olur. Bunu önlemek için:

1) /etc/pcmcia/config.opts Dosyasını açalım

gksudo gedit /etc/pcmcia/config.opts

2) Aşağıdaki bölümü bulalım

  •   include memory 0xc0000-0xfffff
      include memory 0xa0000000-0xa0ffffff
      include memory 0x60000000-0x60ffffff

3) Ve yukarıdaki bölümü tümüyle silip aşağıdaki ile değiştirelim

  •   include memory 0xd0000-0xdffff
      include memory 0xc0000-0xcffff
      include memory 0xc8000-0xcffff
      include memory 0xd8000-0xdffff

Şimdi ise Linux ile süper hızlı internetin keyfini çıkarıyorum ;)

Ps:İnternet bağlantı problemi devam ediyorsa bahsettiğim çıktılarla sorunu yorum olarak yazın yardımcı olmaya çalışırım ;)