NixOS 21.05下QtCreator编译Qt5应用找不到crt1.o如何解决
问题原因
这个错误是链接器无法找到glibc提供的C运行时启动文件crt1.o、crti.o导致的。NixOS没有按照FHS标准把系统库放在/usr/lib等全局路径下,QtCreator默认的构建配置没有正确读取nix-shell环境下的库路径变量,就会出现找不到文件的问题。
解决方案
步骤1:完善shell.nix配置
在你现有shell.nix中补充依赖和环境变量配置,示例如下:
{ pkgs ? import <nixpkgs> {} }: pkgs.mkShell { buildInputs = with pkgs; [ qt5.full qtcreator stdenv.cc.cc.lib glibc pkg-config ]; # 向链接器暴露glibc库路径 NIX_LDFLAGS = "-L${pkgs.glibc}/lib"; # 强制qmake使用nix环境下的编译器 QMAKE_CC = "${pkgs.stdenv.cc}/bin/gcc"; QMAKE_CXX = "${pkgs.stdenv.cc}/bin/g++"; QMAKE_LINK = "${pkgs.stdenv.cc}/bin/g++"; }
步骤2:调整QtCreator项目构建配置
- 重新进入nix-shell并启动QtCreator
- 打开对应项目后,依次点击左侧「项目」->「构建」->「构建环境」
- 确认构建环境选择「继承系统环境」,不要勾选「清除系统环境」选项
- 右键点击项目名,选择「清理」,再选择「执行qmake」,之后重新构建即可。
可选验证步骤
如果仍有问题,可以先在nix-shell终端中直接执行以下命令,验证编译环境是否正常:
qmake make -j$(nproc)
如果命令行编译正常,仅QtCreator内编译报错,重新检查QtCreator的构建环境配置即可。
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

