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

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

コンパイルしようとしています。Xash3DGuixSD v1.0.0とgcc 8.3.0で。

以下のようにld(GNU Linker)は、ctr1.oとctri.oが見つからないというエラーを表示します。これらのファイルは/ gnu / store / {specicProgramName}内の複数のディレクトリ内の異なる場所に存在しますが、驚くべきことに、ルートアクセスも同じであっても、他のライブラリがある〜/ .guix_profileへのシンボリックリンクを作成することはできません。さまざまなサイズの複数のバージョンがあるため、そのプログラムとのみ互換性があるとします。また。 ~/.guix_profile は Unix システムのルートをエミュレートしているように見えますが、GuixSD ではルートと ~/.guix_profile の両方に /usr がありません。ファイル。

デフォルトでは、crt1.o、crti.o、libgcc_s.soは見つかりません。以前と同様にld、これら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」がありますが、約 10,000 個のライブラリには 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

Debianベースのオペレーティングシステムからインストールする必要がある2つのパッケージの名前は、gcc-multilibとです。libc-devこれらのパッケージ(またはその要素)は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

ベストアンサー1

パッケージを作成します。これはおおよその概要であり、改善が必要です。

(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

おすすめ記事