web-dev-qa-db-ja.com

GNU cmakeを使用したGuixSDでプログラムをコンパイルする

GuixSD v1.0.0およびgcc 8.3.0で Xash3D をコンパイルしようとしています。

以下に示すように、ld(GNUリンカー)によってエラーが表示され、ctr1.oとctri.oが欠落しています。これらのファイルは、/ gnu/store/{specificProgramName}内の複数のディレクトリの下の別の場所にありますが、驚くべきことに、〜/ .guix_profileへのシンボリックリンクを作成できませんでした。サイズが異なる複数のバージョンがあるので、それぞれのプログラムとのみ互換性があると思います。さらに。 〜/ .guix_profileはUnixシステムのルートディレクトリをエミュレートしているようですが、GuixSDでは/ usrがルートディレクトリと〜/ .guix_profileの両方にないため、cオブジェクトをリンクする場所がわからなくても、実際のファイル。

本質的に、ldはcrt1.o、crti.o、およびlibgcc_s.soを見つけることができません。以前と同様に、これらの2つのcオブジェクトとlibgccをリンクまたはインストールした後、cmakeはまだ停止する可能性があります他の依存関係に関するさらなるエラー。

とにかく、これは次のコマンドによって出力/ログされるものです(Xash3Dのインストールの推奨方法として指示されています)

Sudo cmake -DHL_SDK_DIR=../hlsdk -DXASH_SDL=yes -DXASH_VGUI=yes -DCMAKE_C_FLAGS="-m32" -DCMAKE_CXX_FLAGS="-m32" -DCMAKE_EXE_LINKER_FLAGS="-m32" ../ && Sudo make
-- The C compiler identification is GNU 9.1.0
-- The CXX compiler identification is GNU 9.1.0
-- Check for working C compiler: /home/nick/.guix-profile/bin/gcc
-- Check for working C compiler: /home/nick/.guix-profile/bin/gcc -- broken
CMake Error at /gnu/store/nrsbv2df55abwji1gsb1ilf22n3rc1xa-cmake-3.13.1/share/cmake-3.13/Modules/CMakeTestCCompiler.cmake:52 (message):
  The C compiler

    "/home/nick/.guix-profile/bin/gcc"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: /home/nick/xash3d/build/CMakeFiles/CMakeTmp
    Run Build Command:"/home/nick/.guix-profile/bin/make" "cmTC_7635d/fast"
    /home/nick/.guix-profile/bin/make -f CMakeFiles/cmTC_7635d.dir/build.make CMakeFiles/cmTC_7635d.dir/build
    make[1]: Entering directory '/home/nick/xash3d/build/CMakeFiles/CMakeTmp'
    Building C object CMakeFiles/cmTC_7635d.dir/testCCompiler.c.o
    /home/nick/.guix-profile/bin/gcc   -m32    -o CMakeFiles/cmTC_7635d.dir/testCCompiler.c.o   -c /home/nick/xash3d/build/CMakeFiles/CMakeTmp/testCCompiler.c
    Linking C executable cmTC_7635d
    /gnu/store/nrsbv2df55abwji1gsb1ilf22n3rc1xa-cmake-3.13.1/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7635d.dir/link.txt --verbose=1
    /home/nick/.guix-profile/bin/gcc -m32     -rdynamic CMakeFiles/cmTC_7635d.dir/testCCompiler.c.o  -o cmTC_7635d 
    /home/nick/.guix-profile/bin/ld: cannot find crt1.o: No such file or directory
    /home/nick/.guix-profile/bin/ld: cannot find crti.o: No such file or directory
    /home/nick/.guix-profile/bin/ld: skipping incompatible /gnu/store/69x60a1pn0mf5jv68al8awjfkyp1miwi-gcc-8.3.0-lib/lib/gcc/x86_64-unknown-linux-gnu/8.3.0/libgcc.a when searching for -lgcc
    /home/nick/.guix-profile/bin/ld: cannot find -lgcc
    /home/nick/.guix-profile/bin/ld: skipping incompatible /gnu/store/69x60a1pn0mf5jv68al8awjfkyp1miwi-gcc-8.3.0-lib/lib/gcc/x86_64-unknown-linux-gnu/8.3.0/../../../libgcc_s.so.1 when searching for libgcc_s.so.1
    /home/nick/.guix-profile/bin/ld: cannot find libgcc_s.so.1
    /home/nick/.guix-profile/bin/ld: skipping incompatible /gnu/store/69x60a1pn0mf5jv68al8awjfkyp1miwi-gcc-8.3.0-lib/lib/gcc/x86_64-unknown-linux-gnu/8.3.0/libgcc.a when searching for -lgcc
    /home/nick/.guix-profile/bin/ld: cannot find -lgcc
    collect2: error: ld returned 1 exit status
    make[1]: *** [CMakeFiles/cmTC_7635d.dir/build.make:87: cmTC_7635d] Error 1
    make[1]: Leaving directory '/home/nick/xash3d/build/CMakeFiles/CMakeTmp'
    make: *** [Makefile:121: cmTC_7635d/fast] Error 2

Debianと同様に、Guixにはパッケージインストール用のbashコマンドがあります。「guix install $ PACKAGE」ですが、そのライブラリには、Debianでの問題を修正する 'gcc-multilib'という名前のライブラリは含まれていません。おそらく、これと他のライブラリを含む代替パッケージはありますか?

Wineを使用しないソリューションを探しています。 libgccの問題を解決するだけでは不十分な場合があるため、本物の解決策にたどり着くために、コメントに残されたアドバイスを試みます(私には危険はありません。OSはUSBキー上の隔離された環境にインストールされています) )。

これが私の$PATHは次のようになります。

/gnu/store/hk4f641r18vpj44m42pny6rp1nwg3d4w-glib-2.56.3-bin/bin
/run/setuid-programs
/home/nick/.config/guix/current/bin
/home/nick/.guix-profile/bin
/home/nick/.guix-profile/sbin
/run/current-system/profile/bin
/run/current-system/profile/sbin

インストールする必要がある2つのパッケージの名前はgcc-multilibおよびlibc-dev DebianベースのOS。これらのパッケージ(またはその要素)は、パッケージのGuixライブラリのどこかに存在する必要がありますが、名前は異なります。

シェルでLIBRARY_PATHのさまざまなパスをバインドしてみました。

$HOME/.guix-profile/lib
$HOME/.guix-profile/lib/gcc/x86_64-unknown-linux-gnu/4.8.2
## Containing many c object/shared object and header files
/gnu/store/aqv6njg05w2yqh8krgrjy0wcbfxb4nn3-gcc-toolchain-9.1.0/lib/crt1.o
## Containing crt1.o and crti.o
4
user77647

パッケージを作成します。これは大まかな概要であり、改善が必要です。

(define-module (gnu packages xash3d)
  #:use-module (guix packages)
  #:use-module (guix git-download)
  #:use-module (guix utils)
  #:use-module (guix build-system cmake)
  #:use-module ((guix licenses) #:select (gpl3))
  #:use-module (gnu packages))

(define-public xash3d
  (package
    (name "xash3d")
    (version "0.19.2")
    (let (commit (string-append "v" version))
          (revision "1")) 
    (source (Origin
              (method git-fetch)
              (uri (git-reference
                   (url (string-append "https://github.com/FWGS/" name "/"))
                   (commit commit)))))
    (build-system cmake-build-system)
    (synopsis "Xash3D FWGS Engine.")
    (description "Xash3D Engine is a custom Gold Source engine rewritten from scratch.")
    (home-page "https://xash.su/")
    (license gpl3)))

リソース: https://www.gnu.org/software/guix/manual/en/html_node/Defining-Packages.html

1
S.S. Anne

マニュアルで説明されているのように、必ずgcc-toolchainパッケージをインストールしてください。

0
civodul