Rust与C++混合开发伪OS时链接ncurses库出现未定义引用错误
Rust与C++混合开发伪OS时链接ncurses库出现未定义引用错误
嘿,这个问题我之前踩过坑!你遇到的是cc crate 链接库的用法问题——直接用flag("-lncurses")没办法正确把ncurses库传递给链接器,所以才会出现一堆未定义引用的错误。
咱们来调整下build.rs里的代码,cc crate 提供了专门的方法来处理链接库,不用手动加-l前缀:
cc::Build::new() .cpp(true) .file("src/button.cpp") .link_lib("ncurses") // 替换掉原来的.flag("-lncurses") .compile("button.a");
为什么原来的写法不行?因为flag是给编译器传递通用参数,但链接库的操作需要让cc crate 明确知道是要链接某个库,它会自动处理不同平台下的链接参数(比如Windows和Linux的差异),手动加-l反而会让链接器找不到正确的库路径或者符号。
另外还有两个小提醒:
- 如果你的系统装的是支持宽字符的ncurses版本(比如
ncursesw),那得把.link_lib("ncurses")改成.link_lib("ncursesw"),不然可能还是会有问题。 - 别忘了检查系统有没有装ncurses的开发包——比如Debian/Ubuntu要装
libncurses-dev,CentOS/RHEL是ncurses-devel,没装的话也会触发这类链接错误。
对了,你C代码里的extern "C"部分是对的,这个能避免C名字修饰导致Rust找不到函数的问题,不用改~
备注:内容来源于stack exchange,提问作者GSB
相关产品推荐
相关产品推荐

