我正在使用 Rust 和 C++ 开发伪操作系统,我正在尝试使用带有 ncurses 的 C++ 来检测按下的按键(我知道 Rust 有一个类似的箱子),并且在 build.rs 中我有以下代码
cc::Build::new()
.cpp(true)
.file("src/button.cpp")
.flag("-lncurses") // Link with ncurses library
.compile("button.a");
但是在运行货物时出现以下错误:
> undefined reference to `initscr'.
> undefined reference to `cbreak
> undefined reference to `noecho
> undefined reference to `stdscr'
> undefined reference to `keypad
> undefined reference to `stdscr'
> undefined reference to `wgetch'
> undefined reference to `printw'
出现错误的代码如下:
// This code is provided by ChatGPT for testing purposes
#include <iostream>
#include <ncurses.h>
using namespace std;
extern "C" {
void button() {
initscr();
cbreak();
noecho();
keypad(stdscr, TRUE);
int key;
while (true) {
key = wgetch(stdscr);
if (key == KEY_DOWN)
printw("Arrow down");
else if (key == KEY_UP)
printw("Arrow up");
else if (key == KEY_LEFT)
printw("Arrow left");
else if (key == KEY_RIGHT)
printw("Arrow right");
else if (key == '\n')
printw("Return");
else if (key == 3)
break;
else if (key < 256)
printw("%c", key);
else
printw("Special character");
printw("\n");
refresh();
}
endwin();
}
}
我试图在充电运行时不出现这些错误
看到@Botje评论说这相当于做
g++ -c src/button.cpp;弧形 rcs 按钮.a 按钮.o
我查找信息并设法通过执行以下操作来修复它:
cc::Build::new()
.file("src/button.cpp")
.compile("button");
println!("cargo:rerun-if-changed=src/button.cpp");
println!("cargo:rustc-link-lib=ncurses");