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 dengancargo install cbindgenPerhatikan bahawa menjalankan alat dari baris perintah perlu diaktifkan, yang mungkin memerlukan mengeksport pemboleh ubahPATHanda 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
libpythonperlu 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.libdanpython3.dll cbindgen: alat untuk mencipta pengepala C, yang boleh anda pasang dengancargo install cbindgenPerhatikan bahawa menjalankan alat dari baris perintah perlu diaktifkan, yang mungkin memerlukan mengemaskini pemboleh ubahPATHanda 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] }