Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud Linux:Install and use Alibaba Cloud Compiler

Son Güncelleme:Oct 08, 2026

Alibaba Cloud Compiler, Clang/LLVM'nin açık kaynak topluluk sürümü olan Clang/LLVM 13 temel alınarak Alibaba Cloud tarafından geliştirilen bir C++ derleyicisidir. Clang/LLVM 13'teki tüm seçenekleri ve parametreleri devralır, Alibaba Cloud altyapısı için derinlemesine optimize edilmiştir ve daha iyi bir kullanıcı deneyimi sunmak amacıyla ek özellikler sağlar. Bu konuda, yüksek performanslı C++ uygulamalarını hızlıca oluşturmak için Alibaba Cloud Linux 3 üzerinde Alibaba Cloud Compiler'ın nasıl yükleneceği ve kullanılacağı açıklanmaktadır.

Arka plan bilgileri

  • GNU Compiler Collection (GCC) ve diğer Clang/LLVM sürümleriyle karşılaştırıldığında, Alibaba Cloud Compiler derleme ve oluşturma hızlarında önemli iyileştirmeler sunar.

    • Alibaba Cloud Compiler, daha hızlı derleme için profil rehberli optimizasyon (PGO) gibi farklı teknikler benimser ve GCC gibi diğer derleyicilere kıyasla büyük ölçekli C++ kodlarını daha hızlı derler.

    • Clang/LLVM bağlayıcısı (LLD), özellikle büyük ikili dosyaları işlerken GCC tarafından kullanılan GNU bağlayıcısından daha iyi performans gösterir.

    • Alibaba Cloud Compiler, C++20 Modüllerini destekler ve standart bir C++ kitaplığının std-module olarak modüler hale getirilmesine olanak tanır. Derlemeyi hızlandırmak ve iş kodunu düşük maliyetle dönüştürmek için std-module kullanabilirsiniz.

  • Alibaba Cloud Compiler, program performansını artırmak için Alibaba Cloud Compiler (LLVM) ThinLTO ve AutoFDO gibi teknolojilerden yararlanır. Alibaba Cloud Compiler, x86 ve Arm64 gibi farklı mimarilerde çalışabilir ve performansı daha da artırmak için YiTian 710 işlemciler için ayarlanmıştır.

  • Alibaba Cloud Compiler, Eş Yordamları (Coroutines) ve Modülleri destekler ve modüler standart kitaplıklar sağlar. Alibaba Cloud, eş yordam kitaplığı, serileştirme kitaplığı, Uzak Yordam Çağrısı (RPC) kitaplığı ve HTTP özelliği gibi C++ geliştiricileri tarafından yaygın olarak kullanılan bileşenleri içeren yaLanTingLibs'i sunar.

    Not

    yaLanTingLibs, geliştiricilerin yüksek performanslı ve modern C++ uygulamaları oluşturmak için kullanabileceği, yüksek performanslı ve kullanımı kolay C++ yardımcı program kitaplıklarından oluşan bir koleksiyondur.

Ön koşullar

Alibaba Cloud Linux 3 çalışan bir Elastic Compute Service (ECS) örneği oluşturulmuştur. Daha fazla bilgi için bkz. Örnek oluşturma.

Not

Alibaba Cloud Compiler yalnızca Alibaba Cloud Linux 3'ü destekler.

Alibaba Cloud Compiler'ı yükleme ve kullanma

  1. Alibaba Cloud Compiler'ı yükleyin.

    sudo yum install -y alibaba-cloud-compiler
  2. libstdc++-devel paketini yükleyin.

    libstdc++-devel, GNU Standart C++ Kitaplığı için başlık dosyaları sağlar.

    sudo yum -y install libstdc++-devel
  3. Ortam değişkenlerini içe aktarın.

    export PATH=/opt/alibaba-cloud-compiler/bin:$PATH
  4. Derleme için Alibaba Cloud Compiler'ı kullanın.

    Basit derleme

    1. hello.cpp dosyasını oluşturun.

      sudo vim hello.cpp
    2. Ekleme moduna girmek için i tuşuna basın ve ardından aşağıdaki içeriği dosyaya kopyalayıp yapıştırın:

      #include <iostream>
      int main() {
        std::cout << "hello C++" << std::endl;
        return 0;
      }
    3. Esc tuşuna basın, :wq girin ve dosyayı kaydedip kapatmak için Enter tuşuna basın.

    4. Modüler C++ kodunu derleyin.

      clang++ -O2 hello.cpp -o hello.cpp.out
    5. Programı çalıştırın.

      ./hello.cpp.out

      Aşağıdaki komut çıktısı, programın çalıştırıldığını gösterir.image

    C++20 Eş Yordamlarını ve Modüllerini kullanma

    Alibaba Cloud Compiler, derleme verimliliğini ve performansını artırmaya yardımcı olan C++20 Eş Yordamlarını ve Modüllerini destekler. Eş yordam örneklerini görüntülemek için bkz. RPC kitaplığını kullanma ve HTTP kitaplığını kullanma.

    Not
    • Geleneksel işlev çağrılarında, bir işlev çağrıldığında tamamlanana kadar yürütülür. Eş yordamlar, işlev yürütmesinin askıya alınmasına ve yeniden başlatılmasına olanak tanıyan bir programlama kavramıdır. Bu esnek kontrol akışı mekanizması, zaman uyumsuz programlamanın ve oluşturucu desenlerinin uygulanmasını basitleştirir.

    • Geleneksel C++ programlama paradigmasında kod, başlık dosyaları (.h/.hpp) ve kaynak dosyalar (.cpp) halinde düzenlenir ve bildirimleri içermek için başlık dosyaları kullanılır. Bir başlık dosyasında bildirimler yaparsınız ve bildirimleri gerektiren her kaynak dosyaya başlık dosyasının bir kopyasını eklemek için #include ön işlemci yönergesini kullanırsınız. Bu nedenle, derleyiciler aynı başlık dosyalarını tekrar tekrar ayrıştırabilir ve bu durum derlemeyi yavaşlatır. Kod organizasyonunu ve derleme verimliliğini iyileştirmek için Modüller tanıtılmıştır.

    Clang kullanarak C++ programlarını derlerken aşağıdaki tabloda yer alan parametreleri yapılandırabilirsiniz.


    Parametre


    Açıklama


    -std=


    Derleme için kullanılan C++ dil standardını belirtir. -std=c++20 belirtirseniz, C++ Eş Yordamları ve Modülleri etkinleşir.


    --precompile


    Modül birimlerini ikili modül arabirimi (BMI) dosyalarına derler.


    -fprebuilt-module-path


    BMI dosyalarını aramak için yolu belirtir.


    -fstd-modules


    Std modülleri için dosyaların derleneceğini belirtir.


    -fmodules-export-all


    Mevcut modüllerdeki tüm bildirimleri export olarak işaretler.


    -fmodules-export-macros


    Modüllerin makroları dışa aktarmasını etkinleştirir.


    -try-load-bmi-when-preprocessing


    Ön işleme sırasında BMI dosyalarını arar.


    -fstd-module-path


    Std modüllerini aramak için yolu belirtir.


    -fcoro-aligned-allocation


    C++ Eş Yordamları için hizalanmış ayırmayı tercih eder.

    Derleme örneği:

    1. Hello.cppm dosyasını oluşturun.

      sudo vim Hello.cppm
    2. Ekleme moduna girmek için i tuşuna basın ve ardından aşağıdaki içeriği dosyaya kopyalayıp yapıştırın:

      module;
      #include <iostream>
      export module Hello;
      export void hello() {
        std::cout << "Hello World!\n";
      }
    3. Esc tuşuna basın, :wq girin ve dosyayı kaydedip kapatmak için Enter tuşuna basın.

    4. use.cpp dosyasını oluşturun.

      sudo vim use.cpp
    5. Ekleme moduna girmek için i tuşuna basın ve ardından aşağıdaki içeriği dosyaya kopyalayıp yapıştırın:

      import Hello;
      int main() {
        hello();
        return 0;
      }
    6. Esc tuşuna basın, :wq girin ve dosyayı kaydedip kapatmak için Enter tuşuna basın.

    7. Modüler C++ kodunu derleyin.

      # Precompile the module interface to create the Hello.pcm file.
      clang++ -std=c++20 Hello.cppm --precompile -o Hello.pcm
      # Compile the main program and link the module to create the executable Hello.out file.
      clang++ -std=c++20 use.cpp -fprebuilt-module-path=. Hello.pcm -o Hello.out
    8. Programı çalıştırın.

      ./Hello.out

      Aşağıdaki komut çıktısı, programın çalıştırıldığını gösterir.

      image

    (İsteğe bağlı) yaLanTingLibs'i kullanma

    C++20 Eş Yordamları ve C++ şablon meta programlama özelliği temelinde eş yordam kitaplığı, serileştirme kitaplığı, RPC kitaplığı ve HTTP özelliği sağlayan yaLanTingLibs'i kullanabilirsiniz. Daha fazla bilgi için yalantinglibs ve async_simple adreslerini ziyaret edin.

    • Serileştirme kitaplığı, verileri serileştirmek ve seri durumdan çıkarmak için kullanılan bir yazılım kitaplığıdır. Serileştirme, bir veri yapısının veya nesne durumunun dosyalarda veya arabelleklerde depolanabilen ya da ağlar üzerinden iletilebilen bir biçime dönüştürülmesi işlemidir. Seri durumdan çıkarma, depolanan veya iletilen veri yapısının veya nesne durumunun orijinallerine geri yüklenmesi işlemidir.

    • RPC, süreçler arası iletişim (IPC) için kullanılan bir kitaplıktır. RPC, C++ programlarının işlevleri veya yöntemleri yerelmiş gibi uzak bir makinede yürütmesine olanak tanır. RPC; ağ iletimi, serileştirme, seri durumdan çıkarma ve rotalar gibi ayrıntıları soyutlar ve geliştiricilerin uygulamalarının iş mantığına odaklanmasını sağlar.

    • HTTP, dağıtılmış, iş birliğine dayalı hiperortam bilgi sistemleri için bir uygulama katmanı protokolüdür. coro_http, C++20 eş yordamları kullanılarak uygulanan, yüksek performanslı ve kullanımı kolay bir HTTP kitaplığıdır. Kullanıcıların HTTP uygulamalarını hızlıca geliştirmesine yardımcı olmak için bir HTTP sunucusu ve bir HTTP istemcisi içerir.

    1. yaLanTingLibs'i yükleyin.

      sudo yum install -y yalantinglibs-devel
    2. yaLanTingLibs'in serileştirme kitaplığını, RPC kitaplığını ve HTTP kitaplığını kullanın.

      Serileştirme kitaplığını kullanma

      1. test.cpp dosyasını oluşturun.

        sudo vim test.cpp
      2. Ekleme moduna girmek için i tuşuna basın ve ardından aşağıdaki içeriği dosyaya kopyalayıp yapıştırın:

        #include <iostream>
        #include "ylt/struct_pack.hpp"
        struct person {
          int age;
          std::string name;
        };
        int main() {
          person tom{.age=20,.name="tom"};
          auto buffer = struct_pack::serialize(tom);
          auto tom2 = struct_pack::deserialize<person>(buffer);
          std::cout<<"age: "<<tom2.value().age<<", name: "<<tom2.value().name<<std::endl;
          return 0;
        }
      3. Esc tuşuna basın, :wq girin ve dosyayı kaydedip kapatmak için Enter tuşuna basın.

      4. Programı derleyin.

        clang++ test.cpp -std=c++20 -o test
      5. Programı çalıştırın.

        ./test

        Aşağıdaki komut çıktısı, programın çalıştırıldığını gösterir.

        image

      RPC kitaplığını kullanma

      1. Bir sunucuda server.cpp dosyasını oluşturun.

        sudo vim server.cpp
      2. Ekleme moduna girmek için i tuşuna basın ve ardından aşağıdaki içeriği dosyaya kopyalayıp yapıştırın:

        #include "ylt/coro_rpc/coro_rpc_server.hpp"
        std::string ping(std::string ping) {
         return "Receive: " + ping + ". Return pong.";
        }
        int main() {
         coro_rpc::coro_rpc_server server{1 , 8801};
         server.register_handler<ping>();
         return server.start();
        }
      3. Esc tuşuna basın, :wq girin ve dosyayı kaydedip kapatmak için Enter tuşuna basın.

      4. client.cpp dosyasını oluşturun.

        sudo vim client.cpp
      5. Ekleme moduna girmek için i tuşuna basın ve ardından aşağıdaki içeriği dosyaya kopyalayıp yapıştırın:

        #include <iostream>
        #include "ylt/coro_rpc/coro_rpc_client.hpp" 
        std::string ping(std::string);
        async_simple::coro::Lazy<void> example(){
            coro_rpc::coro_rpc_client client;
            auto ec = co_await client.connect("localhost","8801");
            assert(!ec);
            auto ret = co_await client.call<ping>("ping");
            std::cout << ret.value() << std::endl;
            co_return;
        };
        int main(){
            async_simple::coro::syncAwait(example());
            return 0;
        }
      6. Esc tuşuna basın, :wq girin ve dosyayı kaydedip kapatmak için Enter tuşuna basın.

      7. Sunucu tarafı programını derleyin.

        clang++ server.cpp  -I /usr/include/ylt/thirdparty -std=c++20  -o server -lpthread
      8. İstemci tarafı programını derleyin.

        Not

        İstemci tarafı programını derlemeden önce, istemcide Alibaba Cloud Compiler'ın yüklü olduğundan ve ortam değişkenlerinin istemciye içe aktarıldığından emin olun. Daha fazla bilgi için bkz. Alibaba Cloud Compiler derlemesi.

        clang++ client.cpp  -I /usr/include/ylt/thirdparty -std=c++20  -o client -lpthread
      9. Sunucuyu ve istemciyi başlatmak için sunucuda ve istemcide aşağıdaki komutu çalıştırın:

        ./server & ./client

        Aşağıdaki komut çıktısı döndürülür. Günlük girişleri; RPC sunucusunun başlatılması, RPC sunucusunun RPC isteklerini dinlemesi, RPC istemcisinin RPC istekleri göndermesi, RPC sunucusunun RPC isteklerini işlemesi ve RPC istemcisinin bağlantıyı kapatması dahil olmak üzere tüm süreci açıklar.

        image

      HTTP kitaplığını kullanma

      1. Bir sunucuda http.cpp dosyasını oluşturun.

        sudo vim http.cpp
      2. Ekleme moduna girmek için i tuşuna basın ve ardından aşağıdaki içeriği dosyaya kopyalayıp yapıştırın:

        #include <iostream>
          
        #include "ylt/coro_http/coro_http_client.hpp"
        #include "ylt/coro_http/coro_http_server.hpp"
        
        using namespace std::chrono_literals;
        using namespace coro_http;
        
        async_simple::coro::Lazy<void> basic_usage() {
          coro_http_server server(1, 9001);
          server.set_http_handler<GET>(
              "/get", [](coro_http_request &req, coro_http_response &resp) {
                resp.set_status_and_content(status_type::ok, "ok");
              });
        
          server.async_start();
          std::this_thread::sleep_for(300ms);
        
          coro_http_client client{};
          auto result = co_await client.async_get("http://127.0.0.1:9001/get");
          assert(result.status == 200);
          assert(result.resp_body == "ok");
          for (auto [key, val] : result.resp_headers) {
            std::cout << key << ": " << val << "\n";
          }
        }
        
        int main() {
          async_simple::coro::syncAwait(basic_usage());
        }
      3. Esc tuşuna basın, :wq girin ve dosyayı kaydedip kapatmak için Enter tuşuna basın.

      4. HTTP programını derleyin.

        clang++ http.cpp -I /usr/include/ylt/thirdparty -std=c++20 -o http -lpthread
      5. HTTP programını çalıştırın.

        ./http

        Aşağıdaki komut çıktısı, programın çalıştırıldığını gösterir.

        image