LINUX.ORG.RU

NixOS + QtCreator = «Cannot find crt1.o, crtio»

 , ,


0

1

Захотелось пощупать ещё раз NixOS.

Установил NixOS версии 25.05. Создал директорию «~/Projects/Qt5» для экспериментов. В этой же директории создал файл под названием «shell.nix» с содержимым

{ pkgs ? import <nixpkgs> {} }:
  pkgs.mkShell {
    buildInputs = [
                    pkgs.qt5.full
                    pkgs.qtcreator
                  ];
}

Зашёл в директорию «~/Projects/Qt5», и выполнил там nix-shell shell.nix.

Запустил QtCreator (версия 17.0.1) командой qtcreator. Создал новый проект с помощью [File] -> [New Project…] -> [Application (Qt)] -> [Qt Widget Application]. Попробовал его запустить, но получил такое ругательство:

cannot find crt1.o:-1: No such file or directory
cannot find crti.o:-1: No such file or directory

Поиск в интернете вывел на этот сайт. Попробовал этот подход и это помогло!

Что же надо сделать, чтобы всё собиралось? Жмём кнопку [Projects] -> [Manage Kits…] -> [Desktop (default)] и в строке «Compiler: C/C++:» выбираем тот, что оканчивается на «…gcc-wrapper-…». После этого всё благополучно собирается!


не все не так просто, flake примерно так

{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs = { self, nixpkgs, flake-utils }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = import nixpkgs { inherit system; };
        qt = pkgs.qt5;
      in
      {
        devShell = pkgs.mkShell {
          nativeBuildInputs = with pkgs; [
            qt.full
            qt.qtwebengine
            qt.qtwebchannel
            qt.qttools
            cmake
            ninja
            meson
            clang
            gcc
            pkg-config
            #wrapQtAppsHook  # Критически важно для Qt-приложений
          ];

          # Переменные окружения для корректной работы Qt
          QT_QPA_PLATFORM = "xcb";
          QT_PLUGIN_PATH = "${qt.qtbase}/${qt.qtbase.qtPluginPrefix}";
          QML2_IMPORT_PATH = "${qt.qtbase}/${qt.qtbase.qtQmlPrefix}";
          LD_LIBRARY_PATH = "${pkgs.lib.makeLibraryPath [
            qt.qtbase
            qt.qtwebengine
            qt.qtwebchannel
            pkgs.stdenv.cc.cc.lib
          ]}";
        };
      }
    );
}

Лучше все через direnv делать, далее nix-shell или flake создает уникальную среду, если что запустить вне ее оно не увидит то оно не увидит ничего. Далее возникает вопрос умеет ли qt-creator в direnv (vscode умеет есть плагин)?

Silerus ★★★★
()
Ответ на: комментарий от czan

Я буду не против если вы покажете как надо сделать.

Ну так никто из пользователей маздайской педали для маздайки не будут против, если им покажут как надо/сделают за них. Сами они не в состояниии родить что-либо, и уж тем более «как надо».

Это и является их характерным свойством и примером как не надо.

anonymous
()