Langkau ke kandungan utama

Pasang Qiskit C API

Panduan ini menerangkan cara memasang dan menggunakan Qiskit C API. Untuk tahu cara melanjutkan aliran kerja Python Qiskit anda dengan C, baca Lanjutkan Python dengan Qiskit C API.

Contoh berikut membina observable menggunakan C:

// file: example.c
#include <stdio.h>
#include <stdint.h>
#include <qiskit.h>

int main(int argc, char *argv[]) {
// build a 100-qubit empty observable
uint32_t num_qubits = 100;
QkObs *obs = qk_obs_zero(num_qubits);

// add the term 2 * (X0 Y1 Z2) to the observable
QkComplex64 coeff = {2, 0};
QkBitTerm bit_terms[3] = {QkBitTerm_X, QkBitTerm_Y, QkBitTerm_Z}; // bit terms: X Y Z
uint32_t indices[3] = {0, 1, 2}; // indices: 0 1 2
QkObsTerm term = {coeff, 3, bit_terms, indices, num_qubits};
qk_obs_add_term(obs, &term); // append the term

// print some properties and the observable itself
printf("num_qubits: %i\n", qk_obs_num_qubits(obs));
printf("num_terms: %lu\n", qk_obs_num_terms(obs));
printf("observable: %s\n", qk_obs_str(obs));

// free the memory allocated for the observable
qk_obs_free(obs);

return 0;
}

UNIX-like​

Bahagian ini menyediakan arahan binaan untuk sistem UNIX-like.

Keperluan​

Penyusunan memerlukan alat-alat berikut:

  • Pengkompil Rust: lihat contohnya panduan memasang Qiskit dari sumber
  • Pengkompil C: contohnya, GCC di Linux dan Clang di MacOS. C API Qiskit serasi dengan pengkompil yang mematuhi piawaian C11.
  • cbindgen: alat untuk mencipta pengepala C, yang boleh anda pasang dengan cargo install cbindgen Perhatikan bahawa menjalankan alat dari baris perintah perlu diaktifkan, yang mungkin memerlukan mengeksport pemboleh ubah PATH anda untuk menyertakan /path/to/.cargo/bin
  • Pustaka Python dipasang (Python 3.9+): Pustaka Python diperlukan semasa penghubungan dinamik. Perlu diingat bahawa Python tidak digunakan semasa runtime dan penterjemah tidak pernah dimulakan; hanya beberapa simbol dari libpython perlu ditakrifkan. Lihat isu ini untuk maklumat lanjut
  • (GNU) Make: ini pilihan tetapi disyorkan untuk menggunakan proses pemasangan automatik.

Kod ini mengesahkan bahawa semua telah dipasang:

rustc --version
gcc --version
cbindgen --version
make --version # optional, but recommended

Binaan​

Untuk membina pengepala C dan pustaka, anda boleh menjalankan arahan Make berikut1 di direktori akar Qiskit,

make c

yang akan menyediakan pustaka kongsi yang telah dikompil di dist/c/lib dan pengepala qiskit.h dengan semua deklarasi fungsi di dist/c/include. Perhatikan bahawa nama pustaka yang tepat bergantung pada platform; contohnya, libqiskit.so di UNIX dan libqiskit.dylib di MacOS. (Perhatikan bahawa langkah ini pada masa ini mengeluarkan banyak amaran, yang dijangka, dan tidak perlu dibimbangkan. Versi masa depan akan menghapuskan amaran tersebut.)

Anda kemudian boleh mengkompil program C menggunakan pengepala dan pustaka C Qiskit:

gcc example.c -o example.o -I /path/to/dist/c/include -L /path/to/dist/c/lib -lqiskit

Untuk memastikan pustaka Qiskit dijumpai semasa penghubungan, tetapkan laluan pustaka runtime untuk menyertakan /path/to/dist/c/lib. Jika pustaka Python tidak tersedia secara lalai semasa penghubungan dinamik, ini juga perlu ditambah. Arahan ini bergantung pada platform. Di Linux:

export LD_LIBRARY_PATH=/path/to/dist/c/lib:$LD_LIBRARY_PATH
# on Linux, the Python library is typically included in the dynamic library path per default
export LD_LIBRARY_PATH=/path/to/python/lib:$LD_LIBRARY_PATH

Di MacOS:

export DYLD_LIBRARY_PATH=/path/to/dist/c/lib:$DYLD_LIBRARY_PATH
export DYLD_LIBRARY_PATH=/path/to/python/lib:$DYLD_LIBRARY_PATH

Sebagai alternatif, anda boleh menetapkan laluan pustaka runtime semasa penyusunan dengan menambah

-Wl,-rpath,/path/to/dist/c/lib
# same for Python

pada bendera pengkompil. Selain itu, pustaka Python perlu tersedia semasa penghubungan dinamik. Di persekitaran Linux ini biasanya sudah menjadi lalai.

Sekarang anda boleh melaksanakan binari:

./example.o

yang, jika menggunakan petikan contoh yang ditunjukkan sebelum ini, sepatutnya mencetak

num_qubits: 100
num_terms: 1
observable: SparseObservable { num_qubits: 100, coeffs: [Complex { re: 2.0, im: 0.0 }], bit_terms: [X, Y, Z], indices: [0, 1, 2], boundaries: [0, 3] }

Windows​

Bahagian ini menyediakan arahan binaan untuk sistem Windows.

Keperluan​

Penyusunan memerlukan alat-alat berikut:

  • Pengkompil Rust: lihat contohnya panduan memasang Qiskit dari sumber
  • Pengkompil C: contohnya, MSVC dan command prompt natif yang menawarkan arahan cl
  • Pemasangan Python, dengan akses kepada python3.lib dan python3.dll
  • cbindgen: alat untuk mencipta pengepala C, yang boleh anda pasang dengan cargo install cbindgen Perhatikan bahawa menjalankan alat dari baris perintah perlu diaktifkan, yang mungkin memerlukan mengemaskini pemboleh ubah PATH anda untuk menyertakan laluan cargo.

Binaan​

Pertama, kompil pustaka dinamik qiskit_cext, dengan menjalankan arahan berikut di direktori akar Qiskit

set PATH="\path\to\pythonlib";%PATH%
cargo rustc --release --crate-type cdylib -p qiskit-cext

Ini akan menjana pustaka dinamik .dll dan fail .dll.lib yang berkaitan di target/release. Seterusnya, jana pengepala dengan

cbindgen --crate qiskit-cext --output dist\c\include\qiskit.h

Ini akan menulis pengepala yang serasi dengan MSVC di dist\c\include.

Sekarang anda boleh menggunakan cl untuk mengkompil program C. Untuk memastikan pengkompil menjumpai pustaka qiskit, kita sertakan target\release dalam pemboleh ubah PATH.

set PATH="\path\to\target\release";%PATH%
cl example.c qiskit_cext.dll.lib -I\path\to\dist\c\include

Sebelum menjalankan, anda perlu menyertakan laluan ke python3.dll anda.

set PATH="\path\to\python3-dll";%PATH%
.\example.exe

sepatutnya mencetak

num_qubits: 100
num_terms: 1
observable: SparseObservable { num_qubits: 100, coeffs: [Complex { re: 2.0, im: 0.0 }], bit_terms: [X, Y, Z], indices: [0, 1, 2], boundaries: [0, 3] }

Footnotes​

  1. Jika anda tidak memasang Make, semak Makefile di direktori akar Qiskit untuk arahan yang diperlukan - atau pasang sahaja Make; masih belum terlambat.) ↩

Source: IBM Quantum docs β€” updated 7 Apr 2026
English version on doQumentation β€” updated 7 Mei 2026
This translation based on the English version of 11 Mac 2026