You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在NixOS 23.05运行Clojure项目时遭遇共享库加载错误

在NixOS 23.05中解决Clojure项目依赖libgvc.so缺失的问题

你遇到的错误是因为clj-graphviz依赖Graphviz的libgvc.so库,而NixOS作为纯函数式发行版,默认不会将系统库暴露到常规路径,导致JVM无法找到该库。以下是几种解决方法:

临时运行方案(快速验证)

直接用nix-shell将Graphviz临时加入当前环境,再执行项目:

nix-shell -p graphviz --run "lein run"

该命令会创建包含Graphviz的临时环境,JVM就能找到所需的libgvc.so,执行后应能正常生成图片文件。

持久化环境配置

如果需要长期运行这类项目,可将Graphviz加入用户或系统环境:

方式1:使用Home Manager(推荐个人用户)

编辑~/.config/nixpkgs/home.nix,在environment.systemPackages中添加graphviz:

{ config, pkgs, ... }:
{
  environment.systemPackages = with pkgs; [
    graphviz
    leiningen # 如果还没安装lein
  ];
  # 其他配置...
}

保存后执行:

home-manager switch

之后直接在终端运行lein run即可。

方式2:修改系统配置(全局生效)

编辑/etc/nixos/configuration.nix,同样添加graphviz到系统包列表:

{ config, pkgs, ... }:
{
  environment.systemPackages = with pkgs; [
    graphviz
    leiningen
  ];
  # 其他系统配置...
}

执行以下命令应用配置:

sudo nixos-rebuild switch

项目级环境配置(用direnv)

如果只想在当前项目目录加载依赖,可配合direnv使用:

  1. 确保已安装direnv并启用(可通过nix-shell -p direnv临时安装,或加入持久化环境)
  2. 在项目根目录创建.envrc文件:
use nix
  1. 同目录创建shell.nix文件:
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
  buildInputs = [
    pkgs.graphviz
    pkgs.leiningen
  ];
}
  1. 执行direnv allow加载环境,之后进入项目目录即可直接运行lein run。

内容的提问来源于stack exchange,提问作者Jeff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 09:12:51