Rust 中对 `initscr' 未定义引用的链接问题

问题描述 投票:0回答:1

我正在使用 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();
    }
}

我试图在充电运行时不出现这些错误

c++ rust rust-cargo ncurses
1个回答
0
投票

看到@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");
© www.soinside.com 2019 - 2024. All rights reserved.