Sariyer kümesini kullanırken kendi ev dizinimize program kurmak istememiz için bir çok sebebimiz olabilir:
- Kullanmak istediğimiz program Sariyer kümesinde kurulu olmayabilir.
- Kurulu olsa bile bizim istediğimiz ayarlarla kurulu olmadığından, kendi isteğimize uygun bir şekilde kurmak isteyebiliriz.
- Kurmak istediğimiz programın lisansı başkalarına kullandırmamıza izin vermediği için kendimize özel bir alanda kurulu olması gerekiyor olabilir.
sariyer kümesinde kurulu programlara bakmak
Kendi ev dizinimize program kurmadan önce sariyer kümesinde kurulu programlara bakmak daha doğru olacaktır. Belki istediğimiz program zaten kuruludur. Yada hiç olmazsa kuracağımız programın gerektirdiği diğer yazılımlar kurulu olabilir. Bu şekilde kurulum işimiz çok daha kolay olacaktır.
Bu amaçla öncelikle MODULE komutu ile hazır module dosyasına sahip yazılımları kontrol etmeliyiz. FFTW yazılımı için bu kontrolü yaparsak 2 adet FFTW modülünün sistemde olduğunu görebiliriz:
FFTW/fftw-3.3.8-intel-2017.4
FFTW/fftw-3.3.8-openmpi-1.8.4
Hatta hazır slurm betiklerinin bulunduğu /okyanus/progs/slurm_betikleri/ dizinini de kontrol etmek mantıklı olacaktır.
Bunun dışında Centos 7 linux sürümünün paket sistemi (rpm, yum) ile gelen yazılımlara da bakmak faydalı olacaktır:
[mercan@sariyer fftw-3.3.8 ]$ rpm -qa |grep -i fftw
fftw-libs-single-3.3.3-8.el7.x86_64
fftw-libs-double-3.3.3-8.el7.x86_64
[mercan@sariyer fftw-3.3.8 ]$
Yukarıda 2 adet fftw sürümünün sistemde kurulu olduğu görülüyor.
spack programı ile kolayca program kurmak
Ayrıntılı açıklamalara geçmeden, spack programı ile kendi ev dizininize tek bir komut ile kolayca istediğiniz programları kurabileceğinizi hatırlatalım. Ne yazıkki tüm programlar için spack kurulumu hazır değil. Yine de, öncelikle spack ile kuruluma bir bakmanız uygun olacaktır. Bu konu spack ile kendi ev dizinimize program kurmak sayfasında ayrıntılı olarak anlatılmıştır.
Kurulum Dökümanlarını Anlamak
Pek çok programın kurulum dökümanı, Sizin belli bir işletim sisteminde bireysel bilgisayarınız için kurulum yapacağınız varsayımı ile yazılmıştır. Dahası, çoğu durumda kurulum dökümanları son derece yetersiz, dağınık yada yanlış anlaşılmaya müsait olabilir. Bu bazen programın kurulumu çok basit olduğu için yada programı yazanların programı geliştirmeye dökümanları hazırlamaktan daha fazla önem vermesinden kaynaklanabilir. Bazen dökümanlar programın kaynak kodu ile dağıtıldığı için web sayfasında uygun bilgi olmayabilir. Bazen de tersine web sayfası gerekli bilgilere sahipken, kaynak kodu içinde bilgi bulunmayabilir. Bu sebeble, işe girişmeden önce kurulum dökümanlarını iyice incelemek, hangi varsayımlar ile yazıldıklarını iyice anlamak yerinde olacaktır.
Bu konuda dökümanları okurken cevabını aramamız gereken önemli sorular şunlardır:
- Program, bizim işletim sistemimizde çalışabilir mi (sariyer kümesinde Centos 7 linux sürümü kuruludur)?
- Programın gereksinim duyduğu yazılımlar (pre-request, dependencies, requirements) nedir?
- Programın isteğe bağlı (opsiyonel) özellikleri için gerekli olan yazılımlar nedir? Bu özellikler bize lazım mı?
- Program, derlenmiş olarak mı, yoksa kaynak kod paketi olarak mı dağıtılıyor?
- Programın kaynak kodu tüm işletim sistemleri için tek bir paket halinde mi, yoksa değişik işletim sistemleri için farklı paketler mi var?
- Program, derlemek için hangi araçların hangi sürümlerini destekliyor?
- Programın değişik sürümlerinin gereksinimleri fark ediyor mu?
- Program, bir bilgisayarda yada birden çok bilgisayarda paralel çalışmayı destekliyor mu? Nasıl?
- Programın lisansı bizim onu sariyer kümesine kurup, kullanmamıza izin veriyor mu?
Örnek bir kurulum: FFTW
Teorik bir yazı yerine örnek bir uygulama ile kurulum aşamalarını anlatalım istedik. Bu amaçla genel bir fikir vermeye uygun bir yazılım olarak FFTW kütüphanesini seçtik. Bu kütüphanenin web sayfası http://www.fftw.org/ adresindedir.
Yazılımın sayfasında Features bölümünde aşağıdaki bilgiler yer alıyor:
Bu metinde yukarıdaki pek çok sorunun cevabını bulabiliyoruz:
- Parallel transforms: parallelized code for platforms with SMP machines with some flavor of threads (e.g. POSIX) or OpenMP. : Burada bahsedilen SMP (threads) ve OpenMP, bu kütüphanenin tek bir makinada paralel çalışabildiğini gösteriyor.
- An MPI version for distributed-memory transforms is also available in FFTW 3.3 : Bu cümle ile de birden çok bilgisayarda paralel çalışmanın desteklendiği bildiriliyor.
- Portable to any platform with a C compiler : Buradanda C derleyicisine ihtiyacımız olduğu ve her türlü işletim sisteminde bu kütüphanenin çalışabileceğini anlıyoruz.
- Free software, released under the GNU General Public License (GPL, see FFTW license) : Bu kısım ile programın istediğimiz gibi kullanabileceğimiz bir lisansı olduğunu görüyoruz.
- FFTW 3.3.8 is the latest official version of FFTW : Son olarak bu ifade ile en güncel sürümün 3.3.8 sürümü olduğunu öğreniyoruz.
Programın Downloads sayfasına gittiğimizde FFTW 3.3.8 bölümünde aşağıdaki bilgiler mevcut:
Buradaki indirme linklerinin fftw-3.3.8.tar.gz şeklinde isimlendirildiği görülmekte. Dosyanın uzantısının .tar.gz olması, tar ve gzip programları ile kod dosyalarının paketlendiğini göstermekte. Şayet uzantı .tgz olsa idi de aynı şey demekti.
Bir diğer satırda Go here for Windows. ifadesi bizi rahatlatıyor, çünkü bu durumda bu dosyaların unix(linux) için olduğunu anlıyoruz. Dahası Be sure to look at the installation section of the manual. ifadesi ile kurulum için bakmamız gereken dökümanlara link de verilmiş.
Bir diğer bölüm ise Git repository bölümü. Günümüzde pek çok açık kaynak kodlu yazılım, github vb. bir sürüm takip sitesi üzerinde barındırılıyor. Bu yazılım da github sayfasına link vermiş. Burada dikkat edilmesi gereken şey; çoğu yazılım sürekli devam eden küçük değişiklikler ile yavaş yavaş geliştirilir. Bu değişiklikler düzgün çalışabilecekleri gibi, sorunlar (bug) da içerebilirler. Bu sebeble yazılım geliştiricileri belli aralıklarla yazılımın düzgün çalıştığına inandıkları bir aşamada, o anki halini bir sürüm numarası ile adlandırıp, bir paket oluştururlar. Bu sayede, kullanıcılar hem yazılımın hangi aşamadaki halini kullandıklarını bilebilirler, hem de nisbeten daha hatasız bir halini kullanmış olurlar. Bu sebeble yazılımların github vb. sitelerdeki son halini değil, bir resmi sürüm olarak paketlenmiş halini indirip, kullanmak en doğrusudur. Biz de github'dan enson halini indirmek yerine, en son resmi sürüm olan 3.3.8 sürümünü indireceğiz.
Önemli Uyarı!
Bu yazıda fftw bir örnek olarak anlatılmıştır. Buradaki komutların her program için aynen geçerli olduğunu zannetmeyiniz. Her programın kendine özgü / farklı kurulumu olabilir! |
Kaynak Kodu İndirmek
Download sayfasındaki fftw-3.3.8.tar.gz linkine sağ tıklayarak yazılım paketinin adresini kopyalayabiliriz. Bu sayede sariyer makinasında doğrudan indirme işlemini wget komutuna bu adresi vererek yapabiliriz:
[mercan@sariyer ~ ]$ wget http://www.fftw.org/fftw-3.3.8.tar.gz
--2019-12-30 12:52:27-- http://www.fftw.org/fftw-3.3.8.tar.gz
Resolving www.fftw.org (www.fftw.org)... 75.98.172.202
Connecting to www.fftw.org (www.fftw.org)|75.98.172.202|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4110137 (3.9M) [application/octet-stream]
Saving to: ‘fftw-3.3.8.tar.gz’
100%[=============================================================================================================================>] 4,110,137 1.17MB/s in 3.7s
2019-12-30 12:52:32 (1.07 MB/s) - ‘fftw-3.3.8.tar.gz’ saved [4110137/4110137]
[mercan@sariyer ~ ]$
Şifre ile girilen web sayfaları gibi bazı durumlarda, önce kendi bilgisayarımıza indirmek, oradan scp ile sariyer makinasına taşımak zorunda kalabiliriz.
Sonuçta yazılımı indirdik. Şimdi istersek programın düzgün inip inmediğini md5sum komutu ile kontrol edebiliriz:
[mercan@sariyer ~ ]$ md5sum fftw-3.3.8.tar.gz
8aac833c943d8e90d51b697b27d4384d fftw-3.3.8.tar.gz
[mercan@sariyer ~ ]$
Komutun çıktısında gözüken karekter dizisini (8aac833c943d8e90d51b697b27d4384d), programın web sayfasında verilen ile karşılaştırarak bir sorun olmadığından emin olabiliriz.
Şimdi indirdiğimiz fftw-3.3.8.tar.gz paketini açalım:
[mercan@sariyer ~ ]$ tar xfz fftw-3.3.8.tar.gz
[mercan@sariyer ~ ]$
tar komutu bu dosyayı açarak bulunduğumuz dizinde fftw-3.3.8 isimli bir dizin oluşturdu. Yazılımın kodları bu dizin içerisinde bulunmakta. Bu dizinin içeriğine bakalım ve o dizine geçelim:
[mercan@sariyer ~ ]$ ls fftw-3.3.8
aclocal.m4 cmake.config.h.in config.sub COPYRIGHT FFTW3ConfigVersion.cmake.in kernel Makefile.in README tests
api CMakeLists.txt configure depcomp fftw.pc.in libbench2 missing README-perfcnt.md threads
AUTHORS compile configure.ac dft genfft ltmain.sh mpi reodft TODO
bootstrap.sh config.guess CONVENTIONS doc INSTALL m4 NEWS simd-support tools
ChangeLog config.h.in COPYING FFTW3Config.cmake.in install-sh Makefile.am rdft support
[mercan@sariyer ~ ]$ cd fftw-3.3.8/
[mercan@sariyer fftw-3.3.8 ]$
Derleme İşlemi
Dizin içeriğine bakarsak, README ve INSTALL isimli iki dosya göreceğiz. README dosyası başlangıç için gereken bilgileri veren bir dosyadır. Bu dosyaya baktığımızda kurulum konusunda şu kısa bilginin yer aldığını göreceksiniz:
INSTALLATION ------------ INSTALLATION FROM AN OFFICIAL RELEASE: Please read chapter 10 "Installation and Customization" of the manual. In short: ./configure make make install
Burada çok genel bir derleme işlem sırası gözükmekte. Pek çok açık kaynaklı program, GNU usulü derleme aşamaları olan ./configure && make && make install komutları ile derlenir. Bu aşamalar hakkındaki ayrıntılı bilgilere INSTALL dosyasından erişebiliriz. Benzer bilgiler FFTW web sayfasında da mevcuttur:
./configure && make && make install komutlarından:
- make komutu, programı derler (compile eder).
- make install derlenmiş programı olması gereken yere yerleştirir.
- En baştaki ./configure ise, make komutunun derleme sırasında kullanacağı, ihtiyaç duyduğu kütüphanelerin var olup olmadığını kontrol ederek gerekli ayarlamaları yapar. İlaveten bizim istediğimiz bazı ayarlamaların yapılmasını sağlar.
Bazı yazılımların kurulumunda ./configure && make && make install komutları yerine cmake komutunun kullanıldığını da görebiliriz. Genelde cmake komutu da configure betiği ile aynı şeyleri yapıp, arka planda make ve make install işlemlerini yapar. Sadece kullanımı biraz farklıdır.
Programın gereksinim duyduğu yazılımları yüklemek
Programın gereksinim duyduğu yazılımlar (pre-request, dependencies, requirements) programın kurulumuna geçilmeden kontrol edilmeli, mevcut değillerse kurulmalıdırlar. Bizim örneğimizde FFTW için belirtilmiş bir gereksinim gözükmemekte. Ancak bir gereksinimin açıkca belirtilmemesi, bir şeylere gereksiniminin olmadığını kanıtlamaz. Derleme sırasında, mesela configure yada cmake bir gereksinim bildirerek derlemeyi reddedebilir.
Bazen kurulum adımlarında gereksinimleri sağlamak için çalıştırılması gereken komutlar listelendiğini görürüz. Mesela:
sudo apt-get install curl mmv
Yukarıda gözüken apt-get install komutu debian, ubuntu vb. dağıtımlarda paket kurmak için kullanılan ve root yetkisi gerektiren bir komuttur. Sariyer kümesinde Centos 7 yüklü olduğundan zaten apt-get komutu yoktur. Ancak olsa idi bile root yetkisi gerektirecekti. Kullanıcının root yetkisi elde etmesi için başına sudo komutu eklenmiştir. Bu ve benzeri iş yapan yum install, dnf install, aptitude install vb. paket kurulum komutlarının hepsi root yetkisi gerektirmektedirler, ve dahası herbiri belli bir linux dağıtımına özeldir.
Çoğu durumda kullanıcının root yetkisi elde edebilmesi için başlarına sudo komutu ekli olarak yazılmışlardır. Ancak sudo ile root yetkisi elde etmek için de bir ayarlama gereklidir. sariyer kümesinde kullanıcılara root yetkisi verilmediğinden bu komutların sudo ile yada sudo olmadan yazılması hiçbir şeyi değiştirmez. Bu komutları kullanamazsınız.
Dolayısı ile böyle bir komut gördüğünüzde bu komutu çalıştırmanızın bir anlamı yoktur. Zaten deneseniz de çalışmayacaktır:
[mercan@sariyer fftw-3.3.8 ]$ sudo yum install curl
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for mercan:
mercan is not in the sudoers file. This incident will be reported.
[mercan@sariyer fftw-3.3.8 ]$
Böylesi bir satır gördüğümüzde, bu yazılımı kurmak için root yetkisi gerektiği anlamına gelmez. Sadece dökümanı hazırlayan Sizin kendi bilgisayarınıza kurulum yaptığınızı varsayarak, gereksinimleri kurmanın en kolay yolunu dökümana yazmıştır. Bu gereksinimleri de, aynı kurmak istediğimiz asıl yazılım gibi root yetkisi olmadan kendi ev dizinimize kurabiliriz. Ancak en mantıklısı öncelikle sistemde zaten yüklü olup, olmadığını kontrol etmektir. Bu kontrol bu yazının başında zaten anlatılmıştır.
Benzer şekilde sistemdeki python sürümlerine pip install komutu ile paket kurmaya çalışırsak ta hata alırız, çünkü root yetkisine sahip değiliz:
[mercan@sariyer fftw-3.3.8 ]$ pip install protobuf
Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/usr/lib64/python2.7/site-packages/numpy-1.13.3.dist-info/METADATA'
Consider using the `--user` option or check the permissions.
[mercan@sariyer fftw-3.3.8 ]$
Bu sorunu da kendi ev dizinimize python virtual environment (virtualenv) kurulumu yaparak aşabiliriz.
Yüklü yazılımları, kuracağımız programa kullandırmak
Sisteme root yetkisi gerektiren bir yazılımı kendimiz kuramıyacağımızı gördük. Peki ama mevcut bir programı nasıl kullanacağız? Gerek kendi ev dizinimize kurulu bir program, gerekse sistemde zaten kurulu olan bir programı nasıl kuracağımız yazılımın kulllanmasını sağlayabiliriz?
Aslında bu zannettiğimizden çok daha kolay! Mesela FFTW yazılımını derlerken MPI paketini kullanarak derlemek istersek, yapmamız gereken sadece yazılımın bakacağı çevre değişkenlerini uygun bir şekilde ayarlamaktan ibaret. Zaten module komutunun yaptığı şey de sadece bu ayarlamaları yapmak.
Mesela mpi/openmpi-3.0.0-gcc-7.1.0 modulünün ne yaptığına bakarsak:
[mercan@sariyer fftw-3.3.8 ]$ module show mpi/openmpi-3.0.0-gcc-7.1.0
-------------------------------------------------------------------
/okyanus/progs/modulefiles/mpi/openmpi-3.0.0-gcc-7.1.0:
module-whatis openmpi @3.0.0 with gcc 7.1.0
conflict mpi
prepend-path PATH /okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/bin
prepend-path CMAKE_PREFIX_PATH /okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/
prepend-path LIBRARY_PATH /okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/lib
prepend-path LD_LIBRARY_PATH /okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/lib
prepend-path PKG_CONFIG_PATH /okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/lib/pkgconfig
prepend-path MANPATH /okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/share/man
prepend-path CPATH /okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/include
-------------------------------------------------------------------
[mercan@sariyer fftw-3.3.8 ]$
module load mpi/openmpi-3.0.0-gcc-7.1.0 komutu çalıştırıldığında yapılanlardan sadece en önemlilerini açıklarsak:
- Yazdığımız komutların aranması için kullanılan PATH değişkenine /okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/bin eklendiğini,
- Derleme sırasında kütüphane araken nereye bakılacağını gösteren LIBRARY_PATH ve LD_LIBRARY_PATH değişkenlerine /okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/lib eklendiğini görüyoruz.
Benzer şekilde kendimiz de, module komutunu kullanmadan, mesela /okyanus/users/mercan/openmpi-2.2.2 dizinindeki bir mpi sürümünü kullanılabilir yapmak istersek yapmamız gerekenler sadece şu komutları çalıştırmaktır:
export PATH=/okyanus/users/mercan/openmpi-2.2.2/bin:$PATH
export LIBRARY_PATH=/okyanus/users/mercan/openmpi-2.2.2/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/okyanus/users/mercan/openmpi-2.2.2/lib:$LD_LIBRARY_PATH
Yukarıdaki export komutu açık bulunulan kabuk ortamında (shell environment) değişkenlerin değerini geçici olarak değiştirir. Bu değişiklik sadece komutu çalıştırdığımız kabuk için ve kapatılana kadar geçerlidir. Bahis konusu yazılımın kullanılması gerekli her durumda bu komutların uygun kabukta tekrar çalıştırılması gereklidir.
configure
configure komutu (betiği), yazılım için gereken kütüphanelerin sistemde yüklü olup olmadığını kontrol ederek, make komutu için gereken ayarlamaları yapar. Ayrıca bize ilave bazı tercihler yapabilmemiz için parametreler sunar.
Bu komuta verebileceğimiz parametreler hakkında bilgi almak için configure betiğini, ./configure --help şeklinde çalıştırabiliriz:
[mercan@sariyer fftw-3.3.8 ]$ ./configure --help `configure' configures fftw 3.3.8 to adapt to many kinds of systems. Usage: ./configure [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print `checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for `--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or `..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, `make install' will install all the files in `/usr/local/bin', `/usr/local/lib' etc. You can specify an installation prefix other than `/usr/local' using `--prefix', for instance `--prefix=$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/fftw] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-shared[=PKGS] build shared libraries [default=no] --enable-debug compile fftw with extra runtime checks for debugging --disable-doc disable building the documentation --enable-random-estimator enable pseudorandom estimator (debugging hack) --disable-alloca disable use of the alloca() function (may be broken on mingw64) --enable-single compile fftw in single precision --enable-float synonym for --enable-single --enable-long-double compile fftw in long-double precision --enable-quad-precision compile fftw in quadruple precision if available --enable-sse enable SSE optimizations --enable-sse2 enable SSE/SSE2 optimizations --enable-avx enable AVX optimizations --enable-avx2 enable AVX2 optimizations --enable-avx512 enable AVX512 optimizations --enable-avx-128-fma enable AVX128/FMA optimizations --enable-kcvi enable Knights Corner vector instructions optimizations --enable-altivec enable Altivec optimizations --enable-vsx enable IBM VSX optimizations --enable-neon enable ARM NEON optimizations --enable-armv8-pmccntr-el0 enable the cycle counter on ARMv8 via the PMCCNTR_EL0 register (see README-perfcounters for details and mandatory instructions) --enable-armv8-cntvct-el0 enable the cycle counter on ARMv8 via the CNTVCT_EL0 register (see README-perfcounters for details and mandatory instructions) --enable-armv7a-cntvct enable the cycle counter on Armv7a via the CNTVCT register (see README-perfcounters for details and mandatory instructions) --enable-armv7a-pmccntr enable the cycle counter on Armv7a via the PMCCNTR register (see README-perfcounters for details and mandatory instructions) --enable-generic-simd128 enable generic (gcc) 128-bit SIMD optimizations --enable-generic-simd256 enable generic (gcc) 256-bit SIMD optimizations --enable-mips-zbus-timer use MIPS ZBus cycle-counter --enable-fma enable if the machine architecture "naturally" prefers fused multiply-add instructions --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-mpi compile FFTW MPI library --disable-fortran don't include Fortran-callable wrappers --enable-openmp use OpenMP directives for parallelism --enable-threads compile FFTW SMP threads library Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-slow-timer use low-precision timers (SLOW) --with-our-malloc use our aligned malloc (helpful for Win32) --with-our-malloc16 Obsolete alias for --with-our-malloc16 --with-windows-f77-mangling use common Win32 Fortran interface styles --with-incoming-stack-boundary=X Assume that stack is aligned to (1<<X) bytes --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-g77-wrappers force inclusion of g77-compatible wrappers in addition to any other Fortran compiler that is detected --with-combined-threads combine threads into main libfftw3 Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> LT_SYS_LIBRARY_PATH User-defined run-time library search path. CPP C preprocessor MPICC MPI C compiler command F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to <fftw@fftw.org>. [mercan@sariyer fftw-3.3.8 ]$
Gördüğünüz gibi pek çok parametre listelendi. Bu çıktıda kısa açıklamalar mevcutsa da, daha fazla açıklamaya ihtiyaç duyarsak INSTALL dosyasında da ilave bilgi mevcuttur.
Bir çok yazılımın configure betiği, bu parametrelerin çoğunu ve başka ilave parametreleri içerir. Yani, genel yapı hemen hepsinde aynıdır.
Bizim için ilk bakışta önemli olan parametreleri açıklarsak:
- --prefix=PREFIX : Bu parametre, derlenen yazılımın normalde duracağı /usr/local dizini yerine bizim istediğimiz başka bir dizine konmasını sağlar.
- --enable-mpi : Bu parametre, birden fazla makinada çalışabilen MPI ile paralelleşmiş bir FFTW derlenmesini sağlar.
- --enable-openmp : Bu parametre, bir makinada çalışabilien OpenMP ile paralelleşmiş bir FFTW derlenmesini sağlar.
- CC= : Bu parametre ile, yazılımın hangi c derleyicisi ile derleneceğini ayarlayabiliriz.
Biz birden fazla makinada kullanabilmek için MPI ile paralelleşmiş bir FFTW derlenmek istiyoruz dolayısı ile, configure betiğine --enable-mpi parametresini vereceğiz. Ancak sadece --enable-mpi parametresini vermek yeterli olmayacak, çevre değişkenlerini ayarlayarak, configure betiğinin bizim istediğimiz MPI sürümünü bulmasını sağlamalıyız. Bu amaçla seçtiğimiz mpi sürümü için module load mpi/openmpi-3.0.0-gcc-7.1.0 komutunu önceden çalıştırarak gerekli ayarlamaların yapılmasını sağlamalıyız.
Bu yazılımı kendi ev dizinimize kurmak istediğimiz için --prefix=/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0 parametresini de vereceğiz. Dizinin ismini seçerken anlaşılır olması önemlidir. Ayrıca sorun çıkmaması için tam yol (full path) vermek gereklidir.
Sonuçta çalıştıracağımız configure betiği aşağıdaki gibidir:
[mercan@sariyer fftw-3.3.8 ]$ ./configure --prefix=/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0 --enable-mpi checking for a BSD-compatible install... /bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking whether to enable maintainer-specific portions of Makefiles... no checking build system type... x86_64-pc-linux-gnu checking host system type... x86_64-pc-linux-gnu checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking whether gcc understands -c and -o together... yes checking for style of include used by make... GNU checking dependency style of gcc... gcc3 checking for C compiler vendor... gnu checking for gcc option to accept ISO C99... none needed checking for gcc option to accept ISO Standard C... (cached) none needed checking whether ln -s works... yes checking whether make sets $(MAKE)... (cached) yes . . . . . checking how to get verbose linking output from gfortran... -v checking for Fortran 77 libraries of gfortran... -L/okyanus/progs/gcc/GCC-7.1.0/lib64/../lib64 -L/okyanus/progs/gcc/GCC-7.1.0/lib/../lib64 -L/okyanus/progs/gcc/GCC-7.1.0/lib/gcc/x86_64-pc-linux-gnu/7.1.0 -L/okyanus/progs/gcc/GCC-7.1.0/lib/gcc/x86_64-pc-linux-gnu/7.1.0/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/lib -L/okyanus/progs/gcc/GCC-7.1.0/lib64 -L/okyanus/progs/gcc/GCC-7.1.0/lib -L/okyanus/progs/gcc/GCC-7.1.0/lib/gcc/x86_64-pc-linux-gnu/7.1.0/../../.. -lgfortran -lm -lquadmath checking for dummy main to link with Fortran 77 libraries... none checking for Fortran 77 name-mangling scheme... lower case, underscore, no extra underscore checking whether a cycle counter is available... yes checking that generated files are newer than configure... done configure: creating ./config.status config.status: creating Makefile config.status: creating support/Makefile config.status: creating genfft/Makefile config.status: creating kernel/Makefile config.status: creating simd-support/Makefile config.status: creating dft/Makefile config.status: creating dft/scalar/Makefile config.status: creating dft/scalar/codelets/Makefile config.status: creating dft/simd/Makefile config.status: creating dft/simd/common/Makefile config.status: creating dft/simd/sse2/Makefile config.status: creating dft/simd/avx/Makefile config.status: creating dft/simd/avx-128-fma/Makefile config.status: creating dft/simd/avx2/Makefile config.status: creating dft/simd/avx2-128/Makefile config.status: creating dft/simd/avx512/Makefile config.status: creating dft/simd/kcvi/Makefile config.status: creating dft/simd/altivec/Makefile config.status: creating dft/simd/vsx/Makefile config.status: creating dft/simd/neon/Makefile config.status: creating dft/simd/generic-simd128/Makefile config.status: creating dft/simd/generic-simd256/Makefile config.status: creating rdft/Makefile config.status: creating rdft/scalar/Makefile config.status: creating rdft/scalar/r2cf/Makefile config.status: creating rdft/scalar/r2cb/Makefile config.status: creating rdft/scalar/r2r/Makefile config.status: creating rdft/simd/Makefile config.status: creating rdft/simd/common/Makefile config.status: creating rdft/simd/sse2/Makefile config.status: creating rdft/simd/avx/Makefile config.status: creating rdft/simd/avx-128-fma/Makefile config.status: creating rdft/simd/avx2/Makefile config.status: creating rdft/simd/avx2-128/Makefile config.status: creating rdft/simd/avx512/Makefile config.status: creating rdft/simd/kcvi/Makefile config.status: creating rdft/simd/altivec/Makefile config.status: creating rdft/simd/vsx/Makefile config.status: creating rdft/simd/neon/Makefile config.status: creating rdft/simd/generic-simd128/Makefile config.status: creating rdft/simd/generic-simd256/Makefile config.status: creating reodft/Makefile config.status: creating threads/Makefile config.status: creating api/Makefile config.status: creating mpi/Makefile config.status: creating libbench2/Makefile config.status: creating tests/Makefile config.status: creating doc/Makefile config.status: creating doc/FAQ/Makefile config.status: creating tools/Makefile config.status: creating tools/fftw_wisdom.1 config.status: creating tools/fftw-wisdom-to-conf config.status: creating m4/Makefile config.status: creating fftw.pc config.status: creating config.h config.status: executing depfiles commands config.status: executing libtool commands [mercan@sariyer fftw-3.3.8 ]$
configure betiği pek çok şeyi kontrol ettikten sonra, hata vermeden sonlandı. Eğer ihtiyaç duyulanlardan birini bulamasa idi hata vererek yarıda kesilecekti.
make
./configure && make && make install komutlarından sıra make komutunu çalıştırmaya geldi. Bu aşama gerçekten programın derlendiği aşamadır. Büyük yazılımlar için çok uzun sürebilir. Bir çok büyük yazılım derleme süresini kısalmak için paralel çalışmayı da destekler. Genelde make -j İŞLEMCİ_SAYISI şeklinde istenen sayıda işlemci kullanılarak yapılabilir. Bizim derleyeceğimiz yazılım nisbeten küçük olduğundan paralel derlemeye gerek yok. Sadece make komutunu çalıştıracağız:
[mercan@sariyer fftw-3.3.8 ]$ make make all-recursive make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8' Making all in support make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/support' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/support' Making all in kernel make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/kernel' /bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I.. -I .. -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -MT align.lo -MD -MP -MF .deps/align.Tpo -c -o align.lo align.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I.. -I .. -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -MT align.lo -MD -MP -MF .deps/align.Tpo -c align.c -o align.o mv -f .deps/align.Tpo .deps/align.Plo /bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I.. -I .. -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -MT alloc.lo -MD -MP -MF .deps/alloc.Tpo -c -o alloc.lo alloc.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I.. -I .. -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -MT alloc.lo -MD -MP -MF .deps/alloc.Tpo -c alloc.c -o alloc.o mv -f .deps/alloc.Tpo .deps/alloc.Plo /bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I.. -I .. -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -MT assert.lo -MD -MP -MF .deps/assert.Tpo -c -o assert.lo assert.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I.. -I .. -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -MT assert.lo -MD -MP -MF .deps/assert.Tpo -c assert.c -o assert.o mv -f .deps/assert.Tpo .deps/assert.Plo . . . . /bin/sh ../libtool --tag=CC --mode=link mpicc -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -o mpi-bench mpi_bench-mpi-bench.o mpi_bench-fftw-bench.o mpi_bench-hook.o libfftw3_mpi.la ../libfftw3.la ../libbench2/libbench2.a -lm libtool: link: mpicc -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -o mpi-bench mpi_bench-mpi-bench.o mpi_bench-fftw-bench.o mpi_bench-hook.o ./.libs/libfftw3_mpi.a /okyanus/users/mercan/fftw-3.3.8/.libs/libfftw3.a ../.libs/libfftw3.a ../libbench2/libbench2.a -lm make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/mpi' make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/mpi' Making all in doc make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc' Making all in FAQ make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc/FAQ' make[3]: Nothing to be done for `all'. make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/doc/FAQ' make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc' make[3]: Nothing to be done for `all-am'. make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/doc' make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/doc' Making all in tools make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/tools' rm -f fftw-wisdom.1 cp fftw_wisdom.1 fftw-wisdom.1 make all-am make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/tools' gcc -DHAVE_CONFIG_H -I. -I.. -I .. -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -MT fftw_wisdom-fftw-wisdom.o -MD -MP -MF .deps/fftw_wisdom-fftw-wisdom.Tpo -c -o fftw_wisdom-fftw-wisdom.o `test -f 'fftw-wisdom.c' || echo './'`fftw-wisdom.c mv -f .deps/fftw_wisdom-fftw-wisdom.Tpo .deps/fftw_wisdom-fftw-wisdom.Po /bin/sh ../libtool --tag=CC --mode=link gcc -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -o fftw-wisdom fftw_wisdom-fftw-wisdom.o ../tests/bench-bench.o ../tests/bench-fftw-bench.o ../libfftw3.la ../libbench2/libbench2.a -lm libtool: link: gcc -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -o fftw-wisdom fftw_wisdom-fftw-wisdom.o ../tests/bench-bench.o ../tests/bench-fftw-bench.o ../.libs/libfftw3.a ../libbench2/libbench2.a -lm make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/tools' make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/tools' Making all in m4 make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/m4' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/m4' make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8' [mercan@sariyer fftw-3.3.8 ]$
Yine sorun yaşamadık. Sorun yaşasa idik işlem yarıda kesilecekti. Ancak bazen make düzgün tamamlanmış gibi gözükse de sorun yaşanmış olabiliyor. Ayrıca çok sayıda çıktı satırları arasındaki mesajlar gözden kaçabiliyor. Bu sebeble Size tavsiyem ilk make komutu bitince, aynı make komutunu tekrar çalıştırmak. Yazılım zaten derlenmiş olduğu için, bu seferki çıktıda hiç gcc (derleyici) satırları olmamalı ve çok daha hızlı bir şekilde bitmeli:
[mercan@sariyer fftw-3.3.8 ]$ make make all-recursive make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8' Making all in support make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/support' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/support' Making all in kernel make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/kernel' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/kernel' Making all in simd-support make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/simd-support' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/simd-support' Making all in dft . . . . make all-am make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/mpi' make[3]: Nothing to be done for `all-am'. make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/mpi' make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/mpi' Making all in doc make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc' Making all in FAQ make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc/FAQ' make[3]: Nothing to be done for `all'. make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/doc/FAQ' make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc' make[3]: Nothing to be done for `all-am'. make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/doc' make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/doc' Making all in tools make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/tools' make all-am make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/tools' make[3]: Nothing to be done for `all-am'. make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/tools' make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/tools' Making all in m4 make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/m4' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/m4' make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8' [mercan@sariyer fftw-3.3.8 ]$
Bu aşamadan sonra make install aşamasına geçebiliriz. Ancak pek çok defa doğru derlenmiş gibi gözüken yazılımın kullanmaya çalışıldığında sorun çıkardığına rastlamışızdır. Bu durumu test etmek için pek çok yazılım, derlenmiş halini kullanarak testler yapan seçenekler sunar. Örneğin make test, yada make check gibi. FFTW yazılımı da böyle bir test sunuyor: make check. Bu testleri çalıştırmanızı tavsiye ederiz.
Çıktısını burada vermeyeceğiz ama biz de bu testi çalıştırdık ve testler başarı ile sonuçlandı. Artık bir sonraki aşamaya geçebiliriz.
make install
Normalde bu yazılımı ./configure betiğine --prefix= parametresi vermeden çalıştırsa idik, bu aşamada root yetkisine ihtiyaç duyacaktık. Çünkü, make install derlenmiş yazılımı alıp, /usr/local dizinine koymaya çalışacaktı. Normal kullanıcının bu dizine yazma hakkı bulunmadığı için de hata verecekti.
Ancak biz derleme öncesinde ./configure betiğine --prefix= parametresi verdiğimiz için bizim söylediğimiz dizine derlediğimiz programı koyacak ve bu dizin de bizim ev dizinimizde olduğu için bir sorunla karşılaşmamalıyız:
[mercan@sariyer fftw-3.3.8 ]$ make install Making install in support make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/support' make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/support' make[2]: Nothing to be done for `install-exec-am'. make[2]: Nothing to be done for `install-data-am'. make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/support' make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/support' Making install in kernel make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/kernel' make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/kernel' make[2]: Nothing to be done for `install-exec-am'. make[2]: Nothing to be done for `install-data-am'. make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/kernel' make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/kernel' . . . . Making install in . make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8' make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8' /bin/mkdir -p '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib' /bin/sh ./libtool --mode=install /bin/install -c libfftw3.la '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib' libtool: install: /bin/install -c .libs/libfftw3.lai /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/libfftw3.la libtool: install: /bin/install -c .libs/libfftw3.a /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/libfftw3.a libtool: install: chmod 644 /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/libfftw3.a libtool: install: ranlib /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/libfftw3.a libtool: finish: PATH="/okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/bin:/okyanus/progs/gcc/GCC-7.1.0/bin:/usr/lib64/qt-3.3/bin:/okyanus/progs/uhem-bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin" ldconfig -n /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib ---------------------------------------------------------------------- Libraries have been installed in: /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the '-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the 'LD_RUN_PATH' environment variable during linking - use the '-Wl,-rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to '/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- /bin/mkdir -p '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/cmake/fftw3' /bin/install -c -m 644 FFTW3Config.cmake FFTW3ConfigVersion.cmake '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/cmake/fftw3' /bin/mkdir -p '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/pkgconfig' /bin/install -c -m 644 fftw3.pc '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/pkgconfig' make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8' make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8' Making install in threads make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/threads' make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/threads' make[2]: Nothing to be done for `install-data-am'. make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/threads' make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/threads' Making install in tests make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/tests' make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/tests' make[2]: Nothing to be done for `install-exec-am'. make[2]: Nothing to be done for `install-data-am'. make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/tests' make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/tests' Making install in mpi make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/mpi' make install-am make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/mpi' make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/mpi' /bin/mkdir -p '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib' /bin/sh ../libtool --mode=install /bin/install -c libfftw3_mpi.la '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib' libtool: install: /bin/install -c .libs/libfftw3_mpi.lai /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/libfftw3_mpi.la libtool: install: /bin/install -c .libs/libfftw3_mpi.a /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/libfftw3_mpi.a libtool: install: chmod 644 /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/libfftw3_mpi.a libtool: install: ranlib /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/libfftw3_mpi.a libtool: finish: PATH="/okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/bin:/okyanus/progs/gcc/GCC-7.1.0/bin:/usr/lib64/qt-3.3/bin:/okyanus/progs/uhem-bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin" ldconfig -n /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib ---------------------------------------------------------------------- Libraries have been installed in: /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the '-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the 'LD_RUN_PATH' environment variable during linking - use the '-Wl,-rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to '/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- /bin/mkdir -p '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/include' /bin/install -c -m 644 fftw3-mpi.h '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/include' /bin/mkdir -p '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/include' /bin/install -c -m 644 fftw3-mpi.f03 fftw3l-mpi.f03 '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/include' make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/mpi' make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/mpi' make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/mpi' Making install in doc make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc' Making install in FAQ make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc/FAQ' make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc/FAQ' make[3]: Nothing to be done for `install-exec-am'. make[3]: Nothing to be done for `install-data-am'. make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/doc/FAQ' make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/doc/FAQ' make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc' make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc' /bin/mkdir -p '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/bin' /bin/install -c fftw-wisdom-to-conf '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/bin' /bin/mkdir -p '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/share/man/man1' /bin/install -c -m 644 fftw-wisdom-to-conf.1 fftw-wisdom.1 '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/share/man/man1' make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/tools' make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/tools' make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/tools' Making install in m4 make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/m4' make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/m4' make[2]: Nothing to be done for `install-exec-am'. make[2]: Nothing to be done for `install-data-am'. make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/m4' make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/m4' [mercan@sariyer fftw-3.3.8 ]$
Çıktıya bakarsanız bize, LD_LIBRARY_PATH değişkenine /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib dizini eklememiz gerektiğini söylüyor. Hatırlarsanız, kendi ev dizinimizdeki kütüphaneleri kullanmak için bazı değişkenleri tanımlamamızın yeterli olacağını Yüklü yazılımları, kuracağımız programa kullandırmak bölümünde anlatmıştık.
Gelin FFTW yazılımının kurulduğu /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0 dizinin ve alt dizinlerinin içeriğine bakalım:
[mercan@sariyer fftw-3.3.8 ]$ ls /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/
bin include lib share
[mercan@sariyer fftw-3.3.8 ]$ ls /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/
cmake libfftw3.a libfftw3.la libfftw3_mpi.a libfftw3_mpi.la pkgconfig
[mercan@sariyer fftw-3.3.8 ]$ ls /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/bin/
fftw-wisdom fftw-wisdom-to-conf
[mercan@sariyer fftw-3.3.8 ]$ ls /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/share/
info man
[mercan@sariyer fftw-3.3.8 ]$ ls /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/include/
fftw3.f fftw3.f03 fftw3.h fftw3l.f03 fftw3l-mpi.f03 fftw3-mpi.f03 fftw3-mpi.h fftw3q.f03
[mercan@sariyer fftw-3.3.8 ]$
Burada bin dizini komutları, lib dizini kütüphane dosyalarını, include dizini başlık dosyalarını (header files), share dizini ise man ve info dosyalarını içeriyor.
Bu yazılımı her kullanmak kullanmak istediğimizde, önce module load mpi/openmpi-3.0.0-gcc-7.1.0 komutu çalıştırılmalıdır. Sonrasında da yazılımın bulunduğu dizinler ilgili çevre değişkenlerine eklenmelidir:
export PATH=/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/bin:$PATH
export LIBRARY_PATH=/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib:$LD_LIBRARY_PATH
Artık işimiz bittiğine göre istersek derleme yaptığımız fftw-3.3.8 dizini silebiliriz.