Şimdi Ara

Fortran programini .so olarak compile etmek icin ne gerekiyor?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
6
Cevap
0
Favori
218
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaslar, fortran ile yazilmis birkac subroutine baska bir yazilim icinde kullanilmak üzere .so dosyasi olarak compile etmeliyim. Linux hakkinda hicbir bilgim yok diyebiliriz neredeyse. Windows yüklü bir makine ile bunu yapmaliyim. Hicbir bilgim olmadigini göz önünde bulundurursak yapmam gerekenler nelerdir? Kullanilan yazilimin hangi linux sürümü ile compile edilmis olmasi dikkat etmem gerken bir durum mu? Yani uyumsuzluk sorunu olusabilir mi? Entegre edilecek yazilim ile ilgili hangi bilgilere sahip olmaliyim ki .so dosyasinin uyumlu olacagini garanti altina alabileyim?

    Sanirim Virtual Box gibi bir emulator yüklemeliyim. Linux sürümü icinde fortran compiler varsayilan olarak geliyor mu bilmiyorum ama linux altinda calisan bir fortran compiler kullanmaliyim galiba. Bilen varsa kisaca bana yapmam gerekenleri adim adim özetleyebilir mi?



  • GCC yani GNU Compiler Collection ile yapılabilir cunku GCC derleyici koleksiyonuna Fortran dahil ve komut satırı derleyici adı gfortran. Fakat bu derlemeyi Windows makinada yapacaksan cross-compile denilen sekilde yani derleme seçenekleri olan 'build' ve 'host' a farklı işletim sistemleri vererek derlemen gerekecek, so olduğu için ilk başta Position Independent Code / PIC ve c seçenekleri ile



    $ gfortran -Wall -fPIC -c fortran_kod.ftn --build=i686-pc-mingw32 --host=i686-linux-gcc

    derlenir. Oradaki -Wall Warning all 'dur yani tüm uyarıları göster, -c ise exe veya Linux'taki binary oluşturma, sadece obje dosyası oluştur seçenekleridir. Bu derleme başarıyla tamamlanırsa fortran_kod.o adlı dosya oluşturması gerekir.



    $ gfortran -shared -Wl,soname,libdosyam.so.1 -o libdosyam.so.1.0 fortran_kod.o

    Burada da so dosyasını oluşturuyoruz. Tahmin edileceği gibi -shared shared object oluşturulacağını, -Wl den sonra virgülle soname ise Linux library convention'u ismini ve -o 'dan sonraki ise fiziksel library ismini tanımlar, en sondaki ise bir önceki derlemede oluşturduğumuz dosya.



    Kullanılacak yazılım derken Windows'taki GCC / gfortran derleyiciyi diyorsan onun Windows'taki son versiyonu 5'li birşey ve onun üreteceği binary Linux'un tüm güncel versiyonlarında çalışır fakat Linux'ta çalışacak bir binary 'nin Windows makinada derlenmesi cok rastlanan birşey değil. Tersine cok rastlanıyor yani Linux projelerinin Windows portları Linux makinada sıklıkla derleniyor. O yüzden bir Linux makinada derleme yapmak daha iyi olacaktır. Linux makinada gfortran destekli bir GCC olması yeterli. fortran seyrek kullanıldığı için fortran destekli Linux GCC seyrek bulunsa da Ubuntu Linux gibi bir distronun repertuarında vardır diye tahmin ediyorum. Emulatör /Virtual Box için birşey diyemem cunku hiç kullanmadım.



    Not: yukardaki komut satırlarını yolinux.com'taki örnekten uyarladım, gerçekte çalışacak komut satırı farklılık gösterebilir.

    < Bu ileti mini sürüm kullanılarak atıldı >




  • quote:

    Orijinalden alıntı: revivo72

    GCC yani GNU Compiler Collection ile yapılabilir cunku GCC derleyici koleksiyonuna Fortran dahil ve komut satırı derleyici adı gfortran. Fakat bu derlemeyi Windows makinada yapacaksan cross-compile denilen sekilde yani derleme seçenekleri olan 'build' ve 'host' a farklı işletim sistemleri vererek derlemen gerekecek, so olduğu için ilk başta Position Independent Code / PIC ve c seçenekleri ile



    $ gfortran -Wall -fPIC -c fortran_kod.ftn --build=i686-pc-mingw32 --host=i686-linux-gcc

    derlenir. Oradaki -Wall Warning all 'dur yani tüm uyarıları göster, -c ise exe veya Linux'taki binary oluşturma, sadece obje dosyası oluştur seçenekleridir. Bu derleme başarıyla tamamlanırsa fortran_kod.o adlı dosya oluşturması gerekir.



    $ gfortran -shared -Wl,soname,libdosyam.so.1 -o libdosyam.so.1.0 fortran_kod.o

    Burada da so dosyasını oluşturuyoruz. Tahmin edileceği gibi -shared shared object oluşturulacağını, -Wl den sonra virgülle soname ise Linux library convention'u ismini ve -o 'dan sonraki ise fiziksel library ismini tanımlar, en sondaki ise bir önceki derlemede oluşturduğumuz dosya.



    Kullanılacak yazılım derken Windows'taki GCC / gfortran derleyiciyi diyorsan onun Windows'taki son versiyonu 5'li birşey ve onun üreteceği binary Linux'un tüm güncel versiyonlarında çalışır fakat Linux'ta çalışacak bir binary 'nin Windows makinada derlenmesi cok rastlanan birşey değil. Tersine cok rastlanıyor yani Linux projelerinin Windows portları Linux makinada sıklıkla derleniyor. O yüzden bir Linux makinada derleme yapmak daha iyi olacaktır. Linux makinada gfortran destekli bir GCC olması yeterli. fortran seyrek kullanıldığı için fortran destekli Linux GCC seyrek bulunsa da Ubuntu Linux gibi bir distronun repertuarında vardır diye tahmin ediyorum. Emulatör /Virtual Box için birşey diyemem cunku hiç kullanmadım.



    Not: yukardaki komut satırlarını yolinux.com'taki örnekten uyarladım, gerçekte çalışacak komut satırı farklılık gösterebilir.

    Cok tesekkürler. Yalniz anlatiminizda en basta cross compiler kullanmak gerektigini yazmissiniz. Daha sonradan örnek verdiginiz komut satirlari Linux makine icin mi gecerli yoksa cross compiler kullanilan bir windows makine icin mi gecerli? Anladigim kadariyla anlatiminiz tamamiyle linux makinenin varoldugu durum icin ama emin olmak icin soruyorum.




  • Ha yok, o Windows makinada Linux'ta çalışacak so derleme komutu. Cross compile soyut bir deyim ve sadece derlemenin yapıldığı sistemden (=build) farklı işletim sisteminde (=host) çalışacak kod derlendiği zaman yapılan derleme işlemine verilen ad yoksa 'cross-compiler' gibi bir compiler yok, sadece normal GCC derleyici ile cross compile işlemi yapmak var. Bu arada bahsettiğim örnek linki:http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html ve o örnek tamamen Linux üzerinde yani Linux üzerinde ve Linux için .so oluşturuluyor. Cross-compile en cok mobil cihazlar için binary oluştururken kullanılıyor örneğin Android app yaparken Laptop'ta 'javac' ile Java kodunu derlerken yapılan işlemin adı da cross-compile.

    < Bu ileti mini sürüm kullanılarak atıldı >




  • quote:

    Orijinalden alıntı: revivo72

    Ha yok, o Windows makinada Linux'ta çalışacak so derleme komutu. Cross compile soyut bir deyim ve sadece derlemenin yapıldığı sistemden (=build) farklı işletim sisteminde (=host) çalışacak kod derlendiği zaman yapılan derleme işlemine verilen ad yoksa 'cross-compiler' gibi bir compiler yok, sadece normal GCC derleyici ile cross compile işlemi yapmak var. Bu arada bahsettiğim örnek linki:http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html ve o örnek tamamen Linux üzerinde yani Linux üzerinde ve Linux için .so oluşturuluyor. Cross-compile en cok mobil cihazlar için binary oluştururken kullanılıyor örneğin Android app yaparken Laptop'ta 'javac' ile Java kodunu derlerken yapılan işlemin adı da cross-compile.

    Tekrar tesekkürler cevabiniz icin. Cross compiling yapilmasi icin o zaman gfortran yüklendikten sonra örnek verdiginiz sekilde 2 komut satiriyla .so dosyasini derleyebilirim. Lisanli intel fortran compiler var ama sanirim linux icin cross compiling yapamaz, dogru muyum?


    Linux makinede yada emulator üzerinde .so dosyasi derleme hakkinda anladigimi kisaca özetleyecek olursam:

    1- Virtual box gibi bir emulator yükleyecegim ve bu fortran destekli bir Linux GCC icerecek.
    2- Gönderdiginiz sitedeki örnege benzer bir sekilde 2 asamali olarak .so dosyasini olusturacagim. Bu adim sizin örneginizde oldugu gibi 2 asamli ve önce object dosayasinin olusturulmasi ve daha sonra o object dosyasi ile shared object library olusturuyoruz.

    Peki .so dosyasini derlerken entegre edilecegi yazilim ile alakali ayarlar yada komutlar yazilmasi gerekmiyor mu? Entegre edilecegi yazilim da (bir yapisal analiz programi) dogal olarak linux üzerinde calisiyor.

    Ayrica windows icin dll dosyasi derlerken bir library dosaysi olustugunu gördüm ve kodun icine DLLEXPORT ALIAS falan gibi komutlar yazilmasi gerekiyordu ki windows üzerinde calisan yazilim onu DLLIMPORT ile import edebilsin. Bu durumun .so dosyasi icin de gecerli olmasi lazim diye düsünüyorum ama artik .so derlenecegi icin kullanmam gereken komut nedir bilmiyorum. Cross compiling yada linux makinede direk linux icin derleme yapilmasi durumu farketmeksizin böyle olacagini düsünüyorum, dogru mudur?




  • Intel'in lisanslı derleyicisine gerek yok, cunku GCC resmi olarak fortran derleyicisi içeriyor. Verdiğim 2 satırlık kod sadece örnek yoksa gerçekte çalışacak kod farklı olabilir, özellikle seçenekler kısmı.



    quote:

    Peki .so dosyasini derlerken entegre edilecegi yazilim ile alakali ayarlar yada komutlar yazilmasi gerekmiyor mu? Entegre edilecegi yazilim da (bir yapisal analiz programi) dogal olarak linux üzerinde calisiyor.




    .so dosyasının Linux a kurulumu örnekte görülen libdosyam.so.1 ve libdosyam.so.1.0 dosyalarının /usr/lib veya /usr/local/lib gibi klasör altına atılması ile oluyor nitekim .so'yu kullanacak yazılımın default olarak baktığı patikalar da /usr/lib ve /usr/local/lib Duruma göre sembolik link yani libdosyam.so.1'e işaret edecek libdosyam.so adında bir sembolik link te oluşturmak gerekebiliyor. Ünlü bir örnek olarak, apache web server php destekli çalışacağı zaman baktığı dosyanın adı libphp5.so 'dir. Ancak patikası Apache WS'in kurulum klasörü altındaki modules klasörüdür. Yani .so'yu kullanacak yazılıma göre kurulum değişebilir.



    DLL export gibi Linux'ta da ifadesi var fakat o .so'yu kullanacak yazılımın içine gömülüdür. Onun da nasıl olduğu yolinux'taki tutorial'da vardı yanlış hatırlamıyorsam.

    < Bu ileti mini sürüm kullanılarak atıldı >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.