无法使用nixos派生方法包含<ncurses.h>标头

时间:2019-02-04 21:06:28

标签: c++ ncurses nixos

我有这个简单的c ++代码:

#include <ncurses.h>
int main ()
{
    return 0;
}

我尝试使用此shell.nix文件构建的

{stdenv , ncurses}:
with import <nixpkgs> {}; {
     testEnv = stdenv.mkDerivation {
       name = "helloTest";
       buildInputs = [stdenv ncurses];
     };
}

运行命令:

g++ main.cpp -lncurses -o main

我得到错误输出:

main.cpp:1:10: fatal error: ncurses.h: No such file or directory
#include <ncurses.h>
         ^~~~~~~~~~~

尽管我确实安装了ncurses

$ locate ncurses.h
/nix/store/ffjl7aw7f0gjwv4gb4mgb0w49v5dhrkg-ncurses-6.0-20171125-dev/include/ncurses.h

目前,我正在使用专用的docker容器进行c ++构建。但是我想避免这种情况,确实很尴尬,并正确使用nix系统。

知道我显然缺少什么吗?

2 个答案:

答案 0 :(得分:1)

根据先前的建议,我可以使用以下方式进行编译:

#!/usr/bin/env bash 
ncursesInclude="/nix/store/ffjl7aw7f0gjwv4gb4mgb0w49v5dhrkg-ncurses-6.0-20171125-dev/include/"
ncursesLib="/nix/store/54cwjh1lsmjpk2cbs43gw89w4zhk3ybb-ncurses-6.0-20171125/lib/"
g++ main.cpp -I$ncursesInclude -L$ncursesLib -lncurses -o main

但是我觉得需要通往nix商店的具体路径非常尴尬。

我很乐意知道这样做的方法。

答案 1 :(得分:1)

修复shell.nix文件并在下面输入命令后,它似乎可以正常工作。 shell.nix的问题在于它被不必要地包装在lambda中。无论如何,它的参数都被with;表达式所遮盖,因此您只需删除外部lambda。

$ cat shell.nix
with import <nixpkgs> {};
{
     testEnv = stdenv.mkDerivation {
       name = "helloTest";
       buildInputs = [stdenv ncurses];
     };
}
$ nix-shell

[nix-shell:~/tmp/so-54524324]$ g++ main.cpp -lncurses -o main

[nix-shell:~/tmp/so-54524324]$ ./main 

[nix-shell:~/tmp/so-54524324]$ echo $?
0