stdenv.mkDerivation 使用 cmake 静态 link 失败
stdenv.mkDerivation with cmake failed to link staticly
我正在尝试使用以下 default.nix
构建 halite:
with import <nixpkgs> {};
stdenv.mkDerivation rec {
pname = "halite";
version = "git";
name = "${pname}-${version}";
src = ./.;
buildInputs = [ cmake ];
}
但是当我 运行 nix-build default.nix
它未能 link 并出现以下错误:
[ 97%] Building CXX object CMakeFiles/halite.dir/main.cpp.o
[100%] Linking CXX executable halite
/nix/store/z470j6lybdsy4ql972k392490bprhd2g-binutils-2.28.1/bin/ld: cannot find -lpthread
/nix/store/z470j6lybdsy4ql972k392490bprhd2g-binutils-2.28.1/bin/ld: cannot find -lm
/nix/store/z470j6lybdsy4ql972k392490bprhd2g-binutils-2.28.1/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status
可以找到完整的日志here
我尝试修复此问题但没有成功:
- 将
gcc
、pkgconfig
添加到 buildInputs
- 使用
nativeBuildInputs
和 propergatedBuildInputs
cmake
项目 default.nix
和 shell.nix
的正确写法应该是什么?
通过使用 glibc.static
作为 ppb 的 解决了,谢谢。
原来问题不是来自 default.nix
而是来自 halite
尝试使用静态 link.
当我将 CMakeList.txt
更改为使用动态 link 时,构建没问题。
我正在尝试使用以下 default.nix
构建 halite:
with import <nixpkgs> {};
stdenv.mkDerivation rec {
pname = "halite";
version = "git";
name = "${pname}-${version}";
src = ./.;
buildInputs = [ cmake ];
}
但是当我 运行 nix-build default.nix
它未能 link 并出现以下错误:
[ 97%] Building CXX object CMakeFiles/halite.dir/main.cpp.o
[100%] Linking CXX executable halite
/nix/store/z470j6lybdsy4ql972k392490bprhd2g-binutils-2.28.1/bin/ld: cannot find -lpthread
/nix/store/z470j6lybdsy4ql972k392490bprhd2g-binutils-2.28.1/bin/ld: cannot find -lm
/nix/store/z470j6lybdsy4ql972k392490bprhd2g-binutils-2.28.1/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status
可以找到完整的日志here
我尝试修复此问题但没有成功:
- 将
gcc
、pkgconfig
添加到buildInputs
- 使用
nativeBuildInputs
和propergatedBuildInputs
cmake
项目 default.nix
和 shell.nix
的正确写法应该是什么?
通过使用 glibc.static
作为 ppb 的
原来问题不是来自 default.nix
而是来自 halite
尝试使用静态 link.
当我将 CMakeList.txt
更改为使用动态 link 时,构建没问题。