不能包括 使用标题nixos推导

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

我有这个简单的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

目前我使用了针对c专用docker容器++的基础之上。但我想避免这种情况,真的很尴尬,并正确使用nix的系统。

任何想法,我显然缺少什么?

c++ ncurses nixos
2个回答
1
投票

看来,它的工作原理固定shell.nix文件并输入以下命令后罚款。与shell.nix的问题是,这是不必要的包装在一个lambda。它的参数是由with;表达反正阴影,所以你可以删除外的λ。

$ 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

1
投票

继前一个答案,我可以编译hapilly与建议:

#!/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

但我觉得太笨拙需要有对尼克斯店具体路径。

我会很高兴地知道这样做的尼克斯方式。

© www.soinside.com 2019 - 2024. All rights reserved.