GCC versiyonu ve uygulama derleme

Selamunaleyküm
bir programı derelerken gcc versiyonu düşük diyor, depoda da yok, üst versiyonu herhalde debain 11 istiyor. Yükseltmek için ne yapabilirim

CMake Error at build_files/cmake/platform/platform_unix.cmake:42 (message):
  GCC version must be at least 9.3 for precompiled libraries, found 8.3.0
Call Stack (most recent call first):
  CMakeLists.txt:913 (include)

burdaki yönergelere göre kaynak koddan 11 ve 9.3 ayrı ayrı yükledim ama hala yanı hatayı veriyor
üst versiyonu nasıl aktif edebilirim

https://ftp.gnu.org/gnu/gcc/

GNU’nun ftp sunucusunda kaynak kodu var.
İsterseniz oradan indirip derlemeyi deneyin.

1 Beğeni

Cevabınız için çok teşekkür ederim
kaynak kod olarak indirdim
derleyip yükledem de
hatta versiyonu bile 11 olarak gösteriyor ama blender programını derlerken hata veriyor

halak@pardus:~$ gcc --version
gcc (GCC) 11.0.0 20210117 (experimental)
Copyright © 2021 Free Software Foundation, Inc.
Bu bir serbest yazılımdır; kopyalama koşulları için kaynak koduna bakınız.
Hiçbir garantisi yoktur; hatta SATILABiLiRLiĞi veya ŞAHSi KULLANIMINIZA
UYGUNLUĞU için bile garanti verilmez.

blender çıktısı

make

Configuring Blender in "/home/halak/blender-git/build_linux" ...
CMake Error at build_files/cmake/platform/platform_unix.cmake:42 (message):
  GCC version must be at least 9.3 for precompiled libraries, found 8.3.0
Call Stack (most recent call first):
  CMakeLists.txt:913 (include)


-- Configuring incomplete, errors occurred!
See also "/home/halak/blender-git/build_linux/CMakeFiles/CMakeOutput.log".
make: *** [GNUmakefile:323: all] Error 1

hatalı derlemeden kaynaklı olabilir mi

gcc derlemesi bayağı uzun sürüyor. Ben en son derlediğimde 12 saat sürmüştü ve laptopumun şarj aleti bozulmuştu. Derleyeceğiniz şeyi debian testing veya unstable ile derleyebilirsiniz. Veya gcc yerine clang kullanabilirsiniz. Clang kullanmak için derlemeden önceşunu uygulayın.

export CC=clang
export CXX=clang++

gcc derleyecekseniz prefix konumu olarak /usr ayarlamalısınız. Yoksa /usr/local içerisine kuracağı için derlemelerde bazen sizin derlediğinizi değil sistemde olanı kullanmaya çalışıyor. Linux from scratch dokümanına bakabilirsiniz. GCC-11.2.0 (multilib desteğini kapatmayın :smiley: )

1 Beğeni

şimdi baktım benim derlediğim sizin dediğiniz gibi usr/local/lib de ama usr/lib e girince oradaki gcc versiyonu 8 olarak gösteriyor
teşekkürler akşam deneyeceğim zaten baya uzun sürüyor

malesef gene olmadı bu sefer make yaparken hata verdi
eğer mümkünse sırayla ne yapacağımı yazabilirmisiniz çünkü sitedeki uyguladıktan sonra

runtime_sysinfo.go:6196:31: hata: use of undefined type 'timespec_sec_tint64'
 6196 | type timespec struct { tv_sec timespec_sec_tint64; tv_nsec timespec_nsec_tint64; }
      |                               ^
runtime_sysinfo.go:6196:60: hata: use of undefined type 'timespec_nsec_tint64'
 6196 | type timespec struct { tv_sec timespec_sec_tint64; tv_nsec timespec_nsec_tint64; }
      |                                                            ^
runtime_sysinfo.go:6189:30: hata: use of undefined type 'timeval_sec_tint64'
 6189 | type timeval struct { tv_sec timeval_sec_tint64; tv_usec timeval_usec_tint64; }
      |                              ^
runtime_sysinfo.go:6189:58: hata: use of undefined type 'timeval_usec_tint64'
 6189 | type timeval struct { tv_sec timeval_sec_tint64; tv_usec timeval_usec_tint64; }
      |                                                          ^
make[4]: *** [Makefile:2865: runtime.lo] Error 1
make[4]: Leaving directory '/home/halak/gecici_dosyalar/gcc-10.2.0/build/x86_64-pc-linux-gnu/libgo'
make[3]: *** [Makefile:2247: all-recursive] Error 1
make[3]: Leaving directory '/home/halak/gecici_dosyalar/gcc-10.2.0/build/x86_64-pc-linux-gnu/libgo'
make[2]: *** [Makefile:1160: all] Error 2
make[2]: Leaving directory '/home/halak/gecici_dosyalar/gcc-10.2.0/build/x86_64-pc-linux-gnu/libgo'
make[1]: *** [Makefile:21061: all-target-libgo] Error 2
make[1]: Leaving directory '/home/halak/gecici_dosyalar/gcc-10.2.0/build'
make: *** [Makefile:1002: all] Error 2

hata veriyor
ve bu işte yeni sayılırım derlerken sorun çıkıyor. tavsiye ettiğiniz bir kaynak varsa derleme ile alakalı çok memnun olurum

Merhaba,

Kurulu bir Pardus’a erişimim yoktu, ancak size yardımcı olabilmek için sanal makineye 19.4 server kurdum, onun üzerine de KDE. Sanırım Blender derlemeye çalışıyorsunuz. Ben daha önce derlememiştim, ama şimdi derledim.

Ben az önce Blender derledim ve yeni bir derleyici kullanmadım. Eğer sadece blender derlemek isterseniz make deps yapmanız yeterli gibi.

sudo apt install build-essential git subversion libx11-dev libxxf86vm-dev libxcursor-dev libxi-dev libxrandr-dev libxinerama-dev libglew-dev cmake qt5-default libopenexr-dev autoconf automake libtool yasm tcl

git clone https://git.blender.org/blender.git
cd blender
git submodule update --init --recursive
make deps
mkdir build
cd build
cmake ..
make -j$(nproc)
make install
bin/blender

blender-built
Ben ninja kullandım, make değil, ama sonuç aynı.

Yine de GCC ve clang derlemek ister misiniz?

Çok teşekkür ederim ama bir türlü yapamadım
make deps dedikten sonra

halak@pardus:~/blender$ make deps

Configuring dependencies in "/home/halak/build_linux/deps"
-- The C compiler identification is GNU 8.3.0
-- The CXX compiler identification is GNU 8.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done

Missing software for building Blender dependencies:
  bison pkg-config 

On Debian and Ubuntu:
  apt install autoconf automake libtool yasm tcl ninja-build meson python3-mako

On macOS (with homebrew):
  brew install autoconf automake bison libtool pkg-config yasm

Other platforms:
  Install equivalent packages.

CMake Error at cmake/check_software.cmake:80 (message):
  Install missing software before continuing
Call Stack (most recent call first):
  CMakeLists.txt:46 (include)


-- Configuring incomplete, errors occurred!
See also "/home/halak/build_linux/deps/CMakeFiles/CMakeOutput.log".
make: *** [GNUmakefile:373: deps] Error 1

ninja ile nasıl yaptınız internette tam nasıl yapılır bulamadım
sistem hatalıdır diye tekrardan format attım çünkü baya bi gcc denemesinden sonra kafayı yemişti ama gene olmadı
bunlarla ilgili nasıl yapılır hakkında bir eğitim veya dokümantasyon varsa bildiğiniz atabilir misiniz

Kullandığınız Pardus sürümünü bilmiyorum. Dediğim gibi, ben 19.4 server indirdim ve üzerine KDE kurdum.

Bugün fark ettim ki blender.org’tan derlenmiş blender 2.92 indirdiğimde de çalışıyor. Yani derlemenize de gerek yok gibi duruyor. Az önce sanal makineyi sildim ve yeniden oluşturdum. Ancak depo çok yavaş çalıştığı için (18KB/s) deneyi hemen tekrar edemiyorum.

Derleme dışında iki seçeneğiniz var:

  1. Derlenmiş paketi kullanma
    Pardus deposunda Blender 2.92.1’i çalıştırmak için gerekli bileşenler mevcut yada blender arşivi ihtiyaç duyduğu kütüphaneleri de içeriyor, çünkü ben sanal makineyi silmeden önce indirip çalıştırabildim. Şimdi Ubuntu’da da denedim ve çalıştı. blender çalıştırılabilir dosyasını incelediğimde ihtiyaç duyduğu kütüphanelerin sistemimde hali hazırda kurulu olduğunu gördüm. Derleme için kurmuş olduğunuz paketler yeterli olabilir. Eksik çıktıkça hangi kütüphanenin eksik olduğunu bulup onu içeren paketi kurmanız gerekebilir (eksik varsa o zaten söyler). Mesela hemen kullanıcı ev dizininizin altında blender isimli bir dizine indirip açın (paketi nereye indirdiğinizin önemi yok; doğrudan ev dizininin altına da indirilebilir):
mkdir ~/blender
cd ~/blender
wget https://ftp.nluug.nl/pub/graphics/blender/release/Blender2.91/blender-2.91.2-linux64.tar.xz
tar -xf blender-2.91.2-linux64.tar.xz
cd blender-2.91.2-linux64
./blender

Bu yöntem çalışırsa, masaüstü ortamınız için bir başlatıcı/kısayol oluşturabilirsiniz.

  1. Snap yardımıyla Blender kurma
    Bugün Snap seçeneğinin de olduğunu gördüm. Hafta sonu Pardus kurduğumda snap çalışmıştı. Eğer derlenmiş paket çalışmazsa, snap ile kurmayı deneyebilirsiniz. Bu çok daha basit olacaktır:
sudo apt update
sudo apt install snapd
sudo snap install core
sudo snap install blender --classic

Ardından blender hazır olacaktır. Snap ile beraber başka uygulamalar da kurabilirsiniz.

Amacınız derlemeyle ilgili tecrübe edinmekse, o yönde yardımcı olmaya çalışayım.

evet biraz öyle aslında derleme ile ilgili sadece blender da değil başka programları derlemeye çalışsam da hata veriyor
blendırıın 2.93 sürümü internette beta olarak var ama bir kaç değişiklik ve kendi sitesindeki grafik kart driverleriyle birlikte derlediği için daha iyi olur diye düşünmüştüm neyse şu an olmasa da olur

blender için olmasa da derleme ile alaklı tecrübe daha fazla nasıl elde edebilirim yardımlarınız içinde ariyetten teşekkür ederim

Gereksinimler

Çalışan bir C ve C++ derleme ortamı oluşturabilmeniz için derleyici ve azılım geliştirme kitlerine ihtiyacınız olacak. Öncelikle build-essential meta paketini kurmanız gerekli:

sudo apt install build-essential

Paketin içeriği

Bu meta pakette GCC (şu anda depodaki versiyon 8), binutils, libc (header), libstdc++ (header) ve make gibi alt paketler yer alıyor. Bunların ne olduklarını İnternet’te araştırırsanız belki daha fazla bilgi bulabilirsiniz.

  • gcc paketinde GNU C compiler, g++ paketinde de GNU C++ compiler yer alıyor.
  • binutils içerisinde de başlıca GNU ld ve gold (linker, derlenmiş nesneleri bağlayan araç), GNU as (assembler, assembly dili derleyicisi), ELF (Linux’ta çalıştırılabilir dosya) araçları yer alıyor. binutils paketinde başka araçlar da bulunuyor.
  • libc-dev içerisinde C standard kütüphanesini kullanmanıza olanak sağlayacak diğer kütüphaneler ve header dosyaları yer alıyor. C kütüphanesinin kendisi (glibc) zaten kurulu.
  • libstdc++-dev içerisinde C++ standard kütüphanesinin GNU tarafından gerçekleştirilmiş sürümünü kullanmanıza olanak sağlayan paket. C++ standard kütüphanesinin kendisi büyük ihtimalle kuruludur (libstdc++). Ayrıca C++ standard kütüphanesi C standard kütüphanesinden gelen header dosyalarına bağımlıdır.
  • make derleme işlemini otomatize etmeye yarayan bir araç. Makefile isminde dosyaları okuyup içerisindeki kurallara göre belirtilen hedefleri derliyor. Size yukarıda bahsettiğim ninja da bunun benzeri bir araç ama daha modern ve hızlı, fakat içeriği Makefile’dan farklı.

Bunlar dışında gerekli olacak araçlar arasında autotools (autoconf, automake) ve CMake var.

C ve C++ ile geliştirilmiş açık kaynak kodlu yazılımların çoğu bu ikisinden birisi (bazen her ikisiyle de) yayınlanır. Kendi derleme sistemlerini kullanan yada bahsetmediğim başka yöntemleri kullananlar da olabilir (mesela meson, scons).

Genel inşa adımları

Açık kaynak kodlu projelerin içerisinde nasıl inşa edileceğine dair bilgi genelde yer alır. “building”, “install.txt”, “readme.md” dosyaları gibi yada “docs” dizini altında başka dokümanlarda, yada projenin Wiki’sinde anlatılır.

Autotools

Eğer bulduğunuz projenin içerisinde configure isminde bir script varsa, ./configure --help ile yardım çıktısına bakın ve istediğiniz seçenkler varsa, bunları ./configurescriptine sağlayın.

  1. configure --varsa-argümanlar
  2. make
  3. make install

autotools kısaca derlemeye çalıştığınız koda sisteminizin uygun olup olmadığını ve uygun olduğu durumda da konfigürasyonu üretip sonunda da Makefile üreten bir sistem. En son 2012 yılında aktif olarak kullandığım için nasıl çalıştığına dair detayları hatırlamıyorum.

CMake

CMake iki adımda gerçekleşecek; bir configure bir de generate aşaması var. Generate aşaması derleme yapmaz, sadece derlemeyi otomatize edecek olan inşa sistemi için proje/Makefile çıktısını oluşturur. Eğer bulduğunuz projenin içerisinde CMakeLists.txt varsa, CMake ile configure ve ardından generate edip yine cmake ile inşa işlemini tamamlayın. Kurulum için sudo cmake --build dizin-adı --target install --config Release kullanabilirsiniz.

  1. Configure adımı aşağıdakilerden birisiyle yapılır:
    1.1 cmake -DOPSIYON=DEGER (bu kullanım aynı configure ve generate adımılarını art arda yapar)
    1.2 ccmake
    1.3 cmake-gui
  2. Generate
  3. İnşa: cmake --build dizin-adı
  4. Kurulum: cmake --build dizin-adı --target install

CMake te autotools benzeri bir araç. Birden fazla platformda çalışıyor ve Makefile dışında da (mesela ninja Microsoft Visual Studio ve Apple Xcode) derleme otomasyonu/proje çeşidini destekliyor. CMake’in kendi dili var.

autotools ve cmake kurulumu

sudo apt install automake autoconf libtool cmake cmake-gui

Kurulum gerekli mi?

Bazen kurulum adımı opsiyonel de olabilir; kurmadan da çalıştırabileceğiniz yazılımlar var.

Deneysel depolardan son sürümler

Derleyicilerin bazıları “testing” yada “deneysel” depolarda bulunabiliyor. Ben kullandığım Ubuntu’ya gcc’yi testing deposundan kurdum. Pardus’un deneysel deposunda gcc’nin yada clang’in son sürümleri yok. Clang’in son sürümünü LLVM’in deposundan temin edebilirsiniz. Derleyicinizi kendininizin derlemesi değerli bir tecrübe olabilir.

GCC mi clang mi?

Clang te GCC’nin C ve C++ derleyicileri gibi C ailesi dilleri için bir derleyici (aslında derleyiciden daha fazlası). Clang CMake yardımıyla inşa ediliyor ve bilgisayarınızda hali hazırda bir C++ derleyicisi olması gerekiyor. Onu inşa etmek te oldukça basit. Bence GCC’den başlayın, clang te sonra denersiniz.

GCC’yi derleme

GCC projesinin kendisi autotools kullanıyor. Denemek için büyük bir proje, ama bence derleyicinin kendisi de işinize yarayabilir. O yüzden gcc derlemenizi tavsiye ediyorum.

Gereksinimler

GCC derlemek için gerekli kütüphaneler GCC’nin sayfasında özetlenmiş. GCC kaynak kodunun yanında bağımlı olduğu kütüphaneleri indiren bir script te var. Onu kullanmak bu aşamada daha kolay olabilir. Yada kendiniz bu gereksinimleri depodan kurabilirsiniz (isl kütüphanesi depoda yok galiba). Sistemdeki zlib’i kullanmak için onun geliştirme paketini kurmanız gerekiyor.

sudo apt install zlib1g-dev

Derleme işlemi

Güncel bir GCC sürümünü (dilediğiniz versiyonu) resmi sayfası üzerinden bilgisayarınıza indirin. GCC derlemeye geçin (arşivi coğrafi olarak Türkiye’ye daha yakın bir yerden de indirebilirsiniz). Aşağıda 10.2 sürümünün koduna ait arşivi ~/gcc-src dizinine indirip açıyorum:

mkdir ~/gcc-src
cd ~/gcc-src
wget ftp://ftp.nluug.nl/mirror/languages/gcc/releases/gcc-10.2.0/gcc-10.2.0.tar.gz
tar -xf gcc-10.2.0.tar.gz
mkdir build
cd build

GCC, kodun bulunduğu dizinde configure çalıştırmayı desteklemiyor. Dolayısıyla build isminde bir dizinin içerisinde derleyeceğiz. configure sizin bazı derleme ayarlarını yapmanızı sağlayacak, sisteminizin projeyi derlemeye ve çalıştırmaya uygun olup olmadığını inceleyecek. configure kullanan projelerin size sunduğu seçenekleri görmek için ./configure --help yazmanız gerekekir. Eğer her şey yolunda giderse, configure sonrasında elinizde bir Makefile olacaktır. Bu da projenin inşa ve kurulum aşaması için gerekli otomasyonun nasıl olacağını tanımlayan bir dosya.

../gcc-10.2.0/configure --enable-languages=c,c++ --program-suffix="-10" --enable-nls --enable-threads=posix --with-system-zlib --disable-multilib

gcc-configure

configure için verilen opsiyonların anlamlarını bu sayfada görebilirsiniz. Burada sadece C ve C++ derleyicilerini derlemek istiyorum, bütün derleyicileri değil. @sulincix multilib desteğini kapatmayın demiş, ama ben açık tutmanın bir faydası olacağını düşünmüyorum, çünkü bu derleyici sistem derleyicisi olmayacak ve hali hazırda sisteminizde multilib çalışma ortamı var mı, bilmiyorum. Multilib’i açmanız durumunda bazı multilib dev paketlerini de kurmanız gerekebilir. Belki benim bilmediğim bir sebeple multilib kurulması gerekiyordur. Program suffix ekini de tavsiye ediyorum. Böylece sizin ürettiğiniz gcc ile dağıtımın sağladığı gcc birbirlerinden farklı isimlere sahip olacaktır.

Yukarıdaki configure başarılı olursa, sırasıyla make -j$(nproc) ve make DESTDIR=$HOME/gcc-10.2 install yapın. İşlemler başarıyla biterse, ~/gcc-10.2/usr/local/bin/gcc-10 çalışan bir GCC 10.2 derleyicisi olarak kullanılabilecek. Arada make -j$(nproc) başarısız olursa, sadece make olarak deneyin. Eğer make başarısız olursa, zaten devam edemezsiniz. Benim sanal makinemdeki derlemem sonunda aşağıdaki şekilde çalıştı:

~/gcc-10.2/usr/local/bin/gcc-10 --version
gcc-10 (GCC) 10.2.0
Copyright © 2020 Free Software Foundation, Inc.
Bu bir serbest yazılımdır; kopyalama koşulları için kaynak koduna bakınız.
Hiçbir garantisi yoktur; hatta SATILABiLiRLiĞi veya ŞAHSi KULLANIMINIZA
UYGUNLUĞU için bile garanti verilmez.

Bu derleyici başarıyla çalışırsa, isterseniz sonra /usr/local’a kurabilirsiniz ve Blender yada benzeri programları derleyebilirsiniz. /usr/local’a kurmadan da yapabilirsiniz, ama kullanması zor olacaktır.

Deneme derlemesi

Yeni inşa ettiğiniz derleyiciyle deneme derlmesi yapacağız. Bu derleyicinin kurduğu kütüphaneler çalışma-zamanı bağlayıcısının bildiği dizinlerde olmayacak. Dolayısıyla RPATH ile kütüphanelerin yerini belirtebilir yada çalışma öncesinde LD_LIBRARY_PATH ile gcc kütüphanelerinin bulunduğu dizinini belirtebiliriz.

LD_LIBRARY_PATH ile ilgili tahminen Türkçe kaynak bulabilirsiniz. Bu çevre değişkeni, çalışma-zamanı bağlayıcısına dinamik/paylaşılan nesnelerin sırayla hangi dizinlerde aranacağını söylüyor.

RPATH te LD_LIBRARY_PATH ile aynı bilgiyi içeriyor, ama bir farkı var; RPATH ile bu bilgi çalışan dosyanın içerisine kaydediliyor.

RPATH’i kullanmanız bu aşamada zor olabilir. Dolayısıyla LD_LIBRARY_PATH ile devam etmenizi tavsiye ediyorum. libstdc++.so’nun nerede olduğunu bulmamız gerekecek (zaten biliyoruz, ama doğru olan şekilde yapalım). Bunu da GCC’ye soracağız.

C++ kullanarak bir deneme yapalım. Aşağıdaki kodu, mesela kullanıcı dizininize listdir.cpp isminde, bir dosyaya kaydedin:

#include <algorithm>
#include <cstdlib>
#include <filesystem>
#include <iostream>
#include <string>

int main(int argc, const char *argv[]) {
  namespace fs = std::filesystem;

  const auto dir = argc == 2 ? fs::path{argv[1]} : fs::current_path();

  if (!fs::is_directory(dir)) {
    std::cerr << "belirtilen yer '" << argv[1] << "' bir dizin degil\n";
    return EXIT_FAILURE;
  }

  std::ranges::for_each(fs::directory_iterator(dir), [](const auto &dir_entry) {
    std::cout << dir_entry.path().filename().string() << "\n";
  });
}

Derlemek için de şu komut satırını kullanabilirsiniz:

~/gcc-10.2/usr/local/bin/g++-10 -std=c++20 -o /tmp/listdir ~/listdir.cpp

Şimdi /tmp/listdir şeklinde çalıştırdığınızda, çalışmaması gerekiyor.

/tmp/listdir: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by /tmp/listdir)

Çalıştırma aşamasında LD_LIBRARY_PATH çevre değişkenini belirtmemiz gerekecek.

LD_LIBRARY_PATH=$(dirname $(~/gcc-10.2/usr/local/bin/g++-10 --print-file-name=libstdc++.so)) /tmp/listdir

ile çalıştırabilirsiniz. Bulunduğunuz dizinin içeriğini listeler. Program isminin yanına bir dizin belirtirseniz, onun içeriğini listeler: örneğin /tmp/listdir /tmp.

GCC’ye --print-file-name ile libstdc++.so kütüphanesinin nerede olduğunu sorduk. Sonra dirname ile bunun bir üst dizinini bulduk. Bu sonucu da LD_LIBRARY_PATH çevre değişkenine atadık. Böylece çalışma-zamanı bağlayıcısı aradığı libstdc++.so.6 isimki nesneyi buldu.

Burada amacımız, doğru libstdc++ kütüphanesini yükleyip yükleyemediğimizi kontrol etmek. C++17’de eklenen “filesystem library” kullanıyoruz. Bu sayede filesystem için gerekli sembollerle bağlanacağız. Bu semboller de sadece yeni libstdc++ kütüphanelerinde var (galiba GCC 9.1’den sonra). Sizin bilgisayarınızda Pardus depodan kurduğunuz gcc 8’de yok. Bu sebeple de LD_LIBRARY_PATH belirtmediğiniz ilk denemede uygulama çalışmadı. Ayrıca C++20’de eklenen ranges özelliklerini kullanıyoruz, fakat bunun kütüphaneyle doğrudan ilişkisi yok. Bu örneğin “hello world” örneğinden de biraz daha ilginç olduğunu düşündüm. Zaten “hello world” ile deneseydik inşa ettiğimiz GCC’nin doğru kütüphaneyle çalışıp çalışmadığını anlayamazdık.

GCC sistem kurulumu

Eğer listdir başarıyla çalışıp dosyaları listelerse, GCC’yi /usr/local dizinine kurabilirsiniz. Bunun için gcc’yi derlediğiniz build dizininde sudo make install yapabilirsiniz (arada DESTDIR yok). Bu kurulumdan sonra doğrudan gcc-10 ile yeni C derleyinizi, g++-10 ile de yeni C++ derleyicinizi çalıştırabilirsiniz. Eğer çalışmazsa, kullanıcı profilinizdeki PATH çevre değişkenine /usr/local/bin’i ekleyin. PATH ile ilgili Türkçe kaynak bulacağınıza eminim. Forumda da olabilir.

Yeni kurduğunuz GCC’nin kütüphanelerinin yerini çalışma-zamanı bağlayıcısına tanıtmamız gerekecek. /etc/ld.so.conf.d altındaki konfigürasyon dosyaları ldconfig tarafından okunacak. Aşağıda göreceğiniz ilk satırda GCC’nin kütüphane dizinini yeni bir konfigürasyon dosyasına ekliyoruz. İkinci satırda da ldconfig’i yeniden çalıştırıyoruz ki cache güncellensin.

realpath $(dirname $(g++-10 --print-file-name=libstdc++.so)) | sudo tee -a /etc/ld.so.conf.d/g++-10.conf
sudo ldconfig

Bu işlemin ardından yukarıda deneme amaçlı derlediğiniz /tmp/listdir uygulamasını doğrudan, başında LD_LIBRARY_PATH olmadan çalıştırabilirsiniz.

Clang’i derleme

(clang derlemek istemezseniz bu bölümü atlayın.)
Clang kodunu klonlamak için git kurmanız gerekli. Hızlı ve modern bir inşa sistemi olan ninja da tavsiye ediyorum. CMake’in kullanıcı arabirimini de beraberinde kurun:

sudo apt install git ninja-build cmake-qt-gui

ardından da kodu tercih ettiğiniz bir yere klonlayın (git’e verilen argümanları İnternet’te bulabilirsiniz):

git clone -b release/11.x --depth=1 https://github.com/llvm/llvm-project.git ~/llvm-project

İşlem bitince cmake ile configure yapmayı deneyin. İşi terminal üzerinden yapmak isterseniz, ccmake diye bir seçeneğiniz var; kullanıcı arabirimi ama terminalde çalışacak. İşi grafik arayüzünden yapmak isterseniz de cmake-gui var. Parametreleri önceden biliyorsanız, doğrudan CMake kullanabilirsiniz. Grafik arayüzünü de terminalden açmanız gerekecek gibi duruyor çünkü Türkçe dille ilgili bir sorun sebebiyle configure aşaması başarısız oluyor. Grafik ortamınızda terminal açıp LC_ALL=C cmake-gui şeklinde çalıştırırsanız, sorun çıkmayacaktır.

“Where is the source code” yerinde LLVM’i klonladığınız dizini bulun. Mesela /home/kullanıcı/llvm-project. Ardından onun da içinden llvm dizinini seçin. Bu alana vereceğiniz dizin içerisinde projenin ana CMakeLists.txt dosyası olmak zorunda. Normalde klonladığınız projenin ana dizininde bir CMakeLists.txt olur. Ancak LLVM’de durum biraz karışık. LLVM eskiden ayrı projelerden oluşuyordu, sonradan tek Git deposuna taşındı ve ana CMakeLists.txt dosyası llvm alt dizininde kaldı. Bu durumda, mesela, /home/kullanıcı/llvm-project/llvm olacak (siz doğru yeri bilgisaayarınızda seçin).

“Where to build the binaries” yerinde de mesela /home/kullanıcı/llvm-build olabilir, yada istediğiniz başka bir yer. Derleme için kullanılacak CMake cache, üretilen proje/Makefile/build.ninja ve derlenmiş nesne dosyaları bu dizine yerleştirilecek.

Ardından “Configure” butonuna basın ve configure başlasın. Bu adımlar sadece cache dizini boşsa yapılır. İlk çalıştığında, dizinin olmadığını söyleyecek. Dizini oluşturmasını söyleyin. Ardından da size hangi inşa aracını kullanacağınızı soracak. Ninja’yı seçin. Unix Makefile da seçebilirsiniz. İnşa için de cmake kullanırsanız, iki seçeneğin çok farkı olmaz. Derleyiciyle ilgili seçenekler varsayılan haliyle kalabilir. Yanlış enerator seçtiyseniz yada herhangi bir sebeple cache’i silmek isterseniz “Where to build binaries” alanında belirtilen cache dizinini silebilirsiniz ve yeniden configure edebilirsiniz. File menüsünde “Delete cache” seçeneği de var.

İşlemin başarısız olma olasılığı yüksek. Karşılaşacağınız hatalarla ilgili önce İnternet’te arama yapın.

Configure başarılı olursa, oldukça uzun bir liste göreceksiniz. Bu liste LLVM’in derleme aşamasında sunduğu ayarlar/seçeneklerdir. Bazılarını configure sırasında CMake belirlerken bazılarını da siz atayabiliyorsunuz. Fare imlecini seçeneklerin üzerinde beklettiğinizde bazılarının açıklamalarını görebilirsiniz. LLVM sayfası inşa aşamasında kullanılabilecek seçenekleri açıklıyor.

“Search” kutusuna CMAKE_BUILD_TYPE yazıp arayın ve değerini Release yada RelWithDebInfo olarak atayın. Debug sizin için sadece yavaş olur ve yer kaplar.

/usr/local yerine farklı bir yere kurmak isterseniz CMAKE_INSTALL_PREFIX seçeneğinde hedef dizini belirtin.

LLVM_ENABLE_PROJECTS girdisini bulup karşısına clang yazın.

LLVM_TARGETS_TO_BUILD girdisine de X86 yazın.

Configure butonuna basın. Eğer sonunda “Configuring done” yazarsa, işlem başarıyla bitti demektir. Eksik kütüphaneden şikayet ederse, kütüphaneyi kurup tekrar configure edebilirsiniz. Configure aşaması çok defa çalıştırılabilir. Seçeneklerinizden memnun olana yada bu adım başarıya ulaşana kadar configure yapabilirsiniz.

Sonra Generate’e basın. Ardından terminalden, “Where to build the binaries” alanında belirttiğiniz dizinde cmake ile inşa işlemini başlatın (örneğin ~/llvm-build).

cmake --build ~/llvm-build

İşlem bittiğinde ~/llvm-build/bin/clang oluşacak.

Yukarıda gcc için yaptğımız deneme işlemin aynısını clang ile de deneyin:

rm -f /tmp/listdir
~/llvm-build/bin/clang++ -std=c++20 -o /tmp/listdir ~/listdir.cpp

ardından inşallah /tmp/listdir çalıştırmayı denediğinizde çalışacaktır. (Eğer yukarıda GCC’yi sudo make install ile kurduysanız LD_LIBRARY_PATH kullanmanıza gerek kalmadan çalışması lazım)

Kafa karışıklığı

Bütün bu yazdıklarım kafanızı karıştırmış olabilir. Wiki gibi bir düzenli bir ortamdan bu bilgiyi alıp uygulamanız daha rahat olabilirdi, ancak herşey bir forum cevabına ve benim kısıtlı boş vaktimin arasına sıkıştı. Bir kaç defa tekrar ederseniz yada başa projeler denerseniz, alışırsınız. Bilmediklerinizi İnternet’te arayarak hem merak ettiğiniz konuyla ilgili, hem de ilişkili soruların çözümlerini görebilirsiniz. Yüzlerce açık kaynak kodlu proje var. Onları da indirip derleyebilirsiniz. GCC ve Clang biraz orta-büyük ölçekli, karışık ve çok seçenek sunan projeler olduğu için korkutabilir. Karşılaşacağınız sorunların aslında birer öğrenme fırsatı olduğunu unutmayın.

Blender derlemesi

Blender CMake kullandığı için cmake-gui yardımıyla sisteminizde nelerin bulunduğunu yada eksik olduğunu görebilir, bazı seçenekleri de değiştirebilirsiniz. GPU rendering için CUDA yada Optix istiyor galiba. Building Blender/CUDA - Blender Developer Wiki ve CMake seçenekleri için de Building Blender/Options - Blender Developer Wiki bazı şeyleri açıklıyor.

Normalde CMake projelerine CMAKE_C_COMPILER ve CMAKE_CXX_COMPILER seçenekleri üzerinden yeni derleyicinizi tanıtabilirsiniz. Ben de kısa süre önce öğrendim ki CMake te CC ve CXX çevre değişkenlerini kabul ediyormuş. @sulincix 'in de mesajında gösterdiği üzere terminalde derleme yapmadan önce:

export CC=/usr/local/bin/gcc-10
export CXX=/usr/local/bin/g++-10

şeklinde çevre değişlenlerini belirtmeyi unutmayın. Ne yaptığınızı bilmiyorsanız yada sonuçlarını öngöremiyorsanız, sistem derleyicileriniz olan /usr/bin/cc ve /usr/bin/c++'ı değiştirmeyin. Bunun ardından Blender’ı derleme işlemine başlayabilirsiniz.

Gereksinimler

Blender web sitesinde anlatılan şekilde gereksinimleri kurun:

sudo apt-get install build-essential git subversion cmake libx11-dev libxxf86vm-dev libxcursor-dev libxi-dev libxrandr-dev libxinerama-dev libglew-dev

Kodu klonlayın:
mkdir ~/blender-git
cd ~/blender-git
git clone --recursive https://git.blender.org/blender.git

Ardından “Advanced Setup” kısmındaki işlemi gerçekleştirin:
cd ~/blender-git
./blender/build_files/build_environment/install_deps.sh --build-all --skip-llvm

Blender’ın bağımlı olduğu bütün kütüphaneleri bu şekilde derleyin. Bu adım bittikten sonra bazı notlar gösteriyor. Oradaki opsiyonları, değiştirmek istediğiniz diğer ayarlarla birlikte CMake’e belirtmeniz gerekiyor. GPU sürücülerini kullanmaktan bahsetmişsiniz. Bu adımda belirtilen ayarların yanına CUDA için gerekli opsiyonları da ekleyeceksiniz.

LLVM ile statik bağlanmak istiyordu. Bu da soruna sebep oldu. O yüzden atladım. Belki LLVM ile statik bağlanmaması sağlanabilir, ama vakit ayıramadım. Bende bir sebeple OpenColorIO projesi derlenmedi. Onu ayrıca derledim ve kurdum:

cmake --build ~/src/blender-deps/OpenColorIO-2.0.0/build --config Release --target install

Son olarak ta Intel Embree indirin: https://www.embree.org/downloads.html

Bunun sonunda, hoşuma gitmese de, şunu yapmayı daha kolay buldum; arşivi tar ile açtıktan sonra embree dizinine (embree-3.12.2.x86_64.linux) girin ve aşağıdaki kopyalamayı yapın:

sudo cp -R lib include share /opt/

Blender derleme

Building Blender/CUDA - Blender Developer Wiki sayfasında bahsedilen opsiyonları bir önceki adımda görüntülenen CMake opsiyonlarıyla birleştirip derlemeyi deneyin.

Elimdeki seçeneklerle CMake çalıştırırsam (siz CUDA ayarlarını da ekleyebilirsiniz):

  cd ~/blender-git
  cmake blender -B build \
  -D WITH_CODEC_SNDFILE=ON \
  -D PYTHON_VERSION=3.9 \
  -D PYTHON_ROOT_DIR=/opt/lib/python-3.9 \
  -D BOOST_ROOT=/opt/lib/boost \
  -D Boost_NO_SYSTEM_PATHS=ON \
  -D Boost_NO_BOOST_CMAKE=ON \
  -D TBB_ROOT_DIR=/opt/lib/tbb \
  -D WITH_OPENCOLORIO=ON \
  -D OPENCOLORIO_ROOT_DIR=/opt/lib/ocio \
  -D OPENEXR_ROOT_DIR=/opt/lib/openexr \
  -D WITH_OPENIMAGEIO=ON \
  -D OPENIMAGEIO_ROOT_DIR=/opt/lib/oiio \
  -D WITH_CYCLES_OSL=OFF \
  -D WITH_LLVM=OFF \
  -D WITH_OPENSUBDIV=ON \
  -D OPENSUBDIV_ROOT_DIR=/opt/lib/osd \
  -D WITH_OPENVDB=ON \
  -D WITH_OPENVDB_BLOSC=ON \
  -D OPENVDB_ROOT_DIR=/opt/lib/openvdb \
  -D BLOSC_ROOT_DIR=/opt/lib/blosc \
  -D WITH_ALEMBIC=ON \
  -D ALEMBIC_ROOT_DIR=/opt/lib/alembic \
  -D WITH_USD=ON \
  -D USD_ROOT_DIR=/opt/lib/usd \
  -D WITH_CODEC_FFMPEG=ON \
  -D FFMPEG_LIBRARIES='avformat;avcodec;avutil;avdevice;swscale;swresample;lzma;rt;theora;theoradec;theoraenc;vorbis;vorbisenc;vorbisfile;ogg;x264;openjp2' \
  -D FFMPEG=/opt/lib/ffmpeg \
  -D WITH_XR_OPENXR=ON \
  -D XR_OPENXR_SDK_ROOT_DIR=/opt/lib/xr-openxr-sdk \
  -D WITH_INSTALL_PORTABLE=OFF \
  -D CMAKE_INSTALL_RPATH=$(find /opt -name *.so -printf "%h\n" | sort | uniq | tr "\n" ";") \
  -D CMAKE_BUILD_WITH_INSTALL_RPATH=ON

Derlenmiş blender dosyasının içine aradığı kütüphaneleri nerede bulacağını RPATH ile kayıt etmek istiyoruz ki çalıştırmamız kolay olsun.

İnşa öncesi seçenekleri görüntüleme

Bütün seçenekleri görmek için ccmake yada cmake-gui kullanmanızı tavsiye ederim. O durumda LC_ALL=C cmake-gui ile çalıştırıp Blender proje dizinini ve bir de inşa dizinini seçin.
cmake-run
Ardından Configure butonuna basın ve generator seçin. Varsayılan değerleri kabul edip ilerleyebilirsiniz. Derleme işlemi o pencereden değil yine bir terminalden olacak. Seçeneklerinizden memnunsanız ve generate aşaması başarıyla bittiyse, CMake’i kapatıp terminale dönün.

Derleme

cmake --build build --config Release --target install

ile derlemeyi ve kısmi başlatabilirsiniz. --build ten sonra belirttiğimiz isim, bir dizin ismi. Ben build olarak seçtim. Siz başka bir isim seçebilirsiniz (Release seçen de var). İşlem bittiğinde build/bin/blender çalışabilir bir blender olacak. Eğer başka bir yere kurmak isterseniz (mesela /usr/local):

cmake -B build -DCMAKE_INSTALL_PREFIX=/usr/local -P build/cmake_install.cmake

blender-running

İnşallah her şey yolunda gider!

5 Beğeni

Allah razı olsun hocam, ne kadar bilgi varsa yazmışsınız ellerinize sağlık . İnşallah dersten sonra denicem inşallah bi sorun çıkmaz, çıkarsa da biraz daha internetten bakarım. Vakit ayırdığınız için de çok teşkkürler.

Rica ederim. Sadece kendi karşılaştığım yada öngörebildiğim sorunları yazabildim. Eminim ki anlatılabilecek daha çok detay var. Ayrıca atladığım yerler de var; llvm ile dinamik bağlama konusuna vakit ayıramadım. Büyük ihtimalle Blender’ın CMake configure adımına bir parametre vermek gerekiyor. Kolay gelsin :slight_smile:

1 Beğeni

Bu konu son cevaptan 30 gün sonra otomatik olarak kapatıldı. Yeni cevap girilmesine izin verilmiyor.