我有这个简单的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系统。
知道我显然缺少什么吗?
答案 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