ホーム>source

Ubuntu 18.xを使用してWSLでNixを実行しています。

$ nix-env -i gcc でGCCをインストールしました   gcc-7.3.0 をインストールした 。

GCCを使用して、単純なCPPファイル(Ferretで生成)をコンパイルしようとしています。しかし、GCCは次のエラーを出します:

$ g++ -std=c++11 -x c++ test_1.cpp -o test_1
/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
collect2: error: ld returned 1 exit status

NixにはGCC( build-essential  同等)、私はそうではないと思います。

Nixを使用した検索( nix-env -qaP 'gcc'nix-env -qaP --description | grep -i gcc )はあまり役に立ちません。

他の投稿は gcc-multilib のインストールに言及しています  (aptパッケージ)。 Nixでの唯一の言及は、テストパッケージです。

$ nix-env -qaP --description | grep -i multilib
nixpkgs.tests.cc-multilib-gcc                                            cc-multilib-test                               
nixpkgs.tests.cc-multilib-clang                                          cc-multilib-test

ビルド環境を機能させる方法について私は困惑しています。どのパッケージを使用する必要があるかについてのドキュメントが見つかりません。これは非常に単純なものです。

あなたの答え
  • 解決した方法 # 1

    要するに、物事はNixで異なって行われます。ほとんどのディストリビューションで行うようなツールやライブラリをインストールする代わりに、Nixを使用する場合、ビルドの依存関係とプログラムのコンパイル手順を宣言する「Nix式」を作成します。たとえば、 hello.cc があるとします  このソースコードで:

    #include <iostream>
    using namespace std;
    int main() 
    {
        cout << "Hello, World!";
        return 0;
    }
    
    

    Nixでコンパイルするには、 default.nix を使用できます  次のようなファイル(同じディレクトリ内):

    let
        pkgs = (import <nixpkgs>) {};
        gcc = pkgs.gcc;
        stdenv = pkgs.stdenv;
    in
        stdenv.mkDerivation {
            name = "hello";
            version = "1.0.0";
            src = ./.;
            phases = [ "unpackPhase" "buildPhase" "installPhase" ];
            buildPhase = ''
                ${gcc}/bin/g++ -std=c++11 -x c++ hello.cc -o hello
            '';
            installPhase = ''
                mkdir -p $out/bin
                cp hello $out/bin
            '';
        }
    
    

    ...次のようにビルドできます: nix build

    最終的には ./result になります   $out を指すシンボリックリンク  上記で使用したディレクトリ。ザ・ウィズウィズ  上記はバイナリを installPhase にコピーします 、したがって、プログラムは $out/bin を実行して実行できます

    Nix言語はそのドキュメントで説明されており、Nixpkgsのドキュメントからそれを使用して物事を構築する方法の概要を得ることができます。

    ./result/bin/hello

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ c++ - QHBoxLayoutの子を左揃え、中央揃え、右揃えにする方法