The original C file is cblas_example1.c
$cinterop -def liblapack.def -o build/c_interop/liblapack
$kotlinc-native lapack.kt -library build/c_interop/liblapack
$./program.kexe
11.0
14.0
17.0
20.0
The original C file is cblas_example1.c
$cinterop -def liblapack.def -o build/c_interop/liblapack
$kotlinc-native lapack.kt -library build/c_interop/liblapack
$./program.kexe
11.0
14.0
17.0
20.0
| import liblapack.* | |
| import kotlinx.cinterop.* | |
| fun main() { | |
| val m = 4; /* Size of Column ( the number of rows ) */ | |
| val n = 4; /* Size of Row ( the number of columns ) */ | |
| val lda = 4; /* Leading dimension of 5 * 4 matrix is 5 */ | |
| val incx = 1; | |
| val incy = 1; | |
| val alpha = 1.0; | |
| val beta = 0.0; | |
| memScoped { | |
| val a = cValuesOf( | |
| 1.0, 2.0, 3.0, 4.0, | |
| 1.0, 1.0, 1.0, 1.0, | |
| 3.0, 4.0, 5.0, 6.0, | |
| 5.0, 6.0, 7.0, 8.0 | |
| ) | |
| val x = cValuesOf(1.0, 2.0, 1.0, 1.0) | |
| var y = nativeHeap.allocArray<DoubleVar>(4) | |
| cblas_dgemv(CblasColMajor, CblasNoTrans, | |
| m, n, alpha, a, lda, x, incx, beta, y, incy) | |
| val yp = y.getPointer(ArenaBase()) | |
| for(i in 0..3) { | |
| println(yp[i]) | |
| } | |
| } | |
| } |
| headers = lapacke.h \ | |
| openblas/cblas.h | |
| headerFilter = openblas/* | |
| compilerOpts.linux = -I/usr/include -I/usr/include/x86_64-linux-gnu | |
| linkerOpts.linux = -L/usr/lib -L/usr/lib/x86_64-linux-gnu -llapacke -llapack -lopenblas |