xeus-cling 调用 C 代码

xeus-cling 调用 C 代码#

直接内联 C 代码#

// 使用 extern "C" 包裹 C 代码
extern "C" {
    // C 语言函数定义
    int add(int a, int b) {
        return a + b;
    }
}
// 在 C++ 中调用
int result = add(3, 4);
result  // 在 Notebook 中显示结果
7

调用预编译的 C 库#

创建 C 头文件 mylib.h

%%file include/mylib.h
#ifndef MYLIB_H
#define MYLIB_H

int multiply(int a, int b);

#endif
Overwriting include/mylib.h

创建 C 源文件 mylib.c

%%file src/mylib.c
#include "mylib.h"

int multiply(int a, int b) {
    return a * b;
}
Overwriting src/mylib.c

编译为共享库:

!gcc -shared -fPIC -o .temp/libmymath.so src/mylib.c -Iinclude

xeus-cling 中调用:

// 加载动态库
#pragma cling add_library_path(".temp")  // 指定库路径
#pragma cling load("mymath") // 加载 libmymath.so

// 声明 C 函数
extern "C" {
    int multiply(int a, int b);
}
// 调用函数
multiply(5, 6)  // 输出 30
30