Search

C 라이브러리를 사용하기

개요

C 라이브러리를 rust 에서 사용하는 예제입니다.
adder.c : int a, int b 를 인자로 받아 더한 결과를 리턴합니다.
add 함수가 정의됩니다.
main.rs : 1 + 2 를 더하기 위해 C 에 정의된 함수를 사용합니다.

코드 구현

adder.h
#ifndef ADDER_H #define ADDER_H int add(int a, int b); #endif
C
복사
adder.c
#include "adder.h" int add(int a, int b) { return a + b; }
C
복사
main.rs
위 코드는 Rust에서 C/C++ 라이브러리를 사용하는 방법을 보여주는 예제입니다.
use std::os::raw::c_int 부분은 c_int 타입을 사용하기 위한 선언입니다. C/C++ 언어에서 int 타입과 같습니다.
extern 블록에서는 add 함수를 정의합니다. add 함수는 C/C++ 라이브러리에서 제공되는 함수로, ab 두 개의 c_int 타입의 인수를 받아서 c_int 타입의 반환 값을 갖습니다.
main 함수에서는 ab 변수를 선언하고, add 함수를 호출하여 결과 값을 result 변수에 저장합니다. unsafe 블록을 사용하는 이유는, C/C++ 함수를 호출할 때 안전하지 않은 코드를 사용하기 때문입니다.
마지막으로 #[link] 속성에서는 adder 라이브러리를 static 라이브러리로 링크하는 것을 명시합니다.
이렇게 #[link] 속성을 사용하여 Rust 코드에서 C/C++ 라이브러리를 사용할 수 있습니다. 단, 라이브러리를 사용할 때에는 안전하지 않은 코드를 사용해야 하므로, 항상 주의하여 사용해야 합니다.
Cargo.toml
[package] name = "rust-name" version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] libc = "0.2.80"
TOML
복사

링킹 & 빌드

1.
C 빌드 & 라이브러리 만들기
gcc -c adder.c -o adder.o ar rcs libadder.a adder.o
Shell
복사
adder.o, libadder.a 파일이 생성된다.
2.
libadder.a/usr/lib or /usr/local/lib 에 옮긴다.
3.
cargo build

결과값

1 + 2 = 3

컬렉션 찾아보기

시리즈