arm-linux-gnueabihfをクロスコンパイルすると、emacs ./configureに "tputs"関数がありません。

arm-linux-gnueabihfをクロスコンパイルすると、emacs ./configureに

私のデフォルトのデバイスでは、armv7lシステム用のArch仮想マシンを介してEmacsをクロスコンパイルしようとしましたが、これまで./configureステップまで問題はありませんでした。ビルド、ホスト、およびターゲットパラメータを正しく設定しましたが、次の問題が発生しました。

「必要な関数 'tputs'はどんなライブラリでも見つかりませんでした。次のライブラリを順番に試しました: (el)または同様のパッケージ。

Googleを少し知っていたこと

  1. DebianとUbuntuでは、libcurses-devはシステムにインストールできる独立した開発パッケージです。
  2. アーチでは、libcurses-devの内容がncursesパッケージに含まれており、個別に使用することはできません。

私は設定ファイルが "libcurses-dev"パッケージによって生成されたリソースを検索していると思いますが、Archに別々に存在しないので見つかりません。私が見つけたこのスレッドある人が自分のコードをコンパイルしようとしている間にこの質問をしました。解決策は、プログラムに「ncurses.h」を含めることでした。私はこれを私のシステムの「/usr/include/ncurses.h」で見ました。設定ファイルを変更したり、./configure にフラグとして追加するにはどうすればよいですか?

私は一般的にLinuxに初めて触れ、常に学んでいます。したがって、ここで間違いなく間違ったことをしている場合は、教えてください!以下は、コンテキストに./configureで使用するパラメータです。

    ./configure --build=x86_64-pc-linux-gnu
--host=arm-linux-gnueabihf --target=host=arm-linux-gnueabihf
--with-x-toolkit=no --with-xpm=no --with-jpeg=no --with-png=no
--with-gif=no --with-tiff=no  --without-xml2 --without-gnutls --without-x
--without-dbus

ありがとうございます!

ベストアンサー1

Arch Linuxはncursesのクロスコンパイルパッケージを提供していません(実際にはわかりません)どのncursesはクロスコンパイラパッケージなので、これはArchの特定の欠陥ではありません。

検索クエリを使用して、どのパッケージがncursesを使用または提供しているかを確認できますpacman。たとえば、次のようになります。

pacman -Ss ncurses

これにより、20個のパッケージが表示されますが、最初のパッケージのみが機能します。

core/ncurses 6.2-2 [installed]
    System V Release 4.0 curses emulation library

~によるとガイドライン、パッケージがある場合、スキーマ名のプレフィックスが付いたリストに次のように表示されます。

パッケージ名の前にはcross-という単語を付けてはいけません(これは以前に提案されましたが、名前の追加の長さのために公式パッケージには採用されませんでした)。ベンダーフィールドまたはベンダーフィールドに「不明」がある場合:arm-linux-gnueabihf-gcc。短い命名規則(mips-gccなど)がある場合はそれを使用できますが、お勧めできません。

Arch Linux呪いパッケージには、ヘッダーファイルなどのncurses.h開発ファイルが含まれています。使用している様子を見ることができます

pacman -Q -l ncurses |grep /include/

これは私に示しています

ncurses /usr/include/
ncurses /usr/include/curses.h
ncurses /usr/include/cursesapp.h
ncurses /usr/include/cursesf.h
ncurses /usr/include/cursesm.h
ncurses /usr/include/cursesp.h
ncurses /usr/include/cursesw.h
ncurses /usr/include/cursslk.h
ncurses /usr/include/eti.h
ncurses /usr/include/etip.h
ncurses /usr/include/form.h
ncurses /usr/include/menu.h  
ncurses /usr/include/nc_tparm.h
ncurses /usr/include/ncurses.h
ncurses /usr/include/ncurses_dll.h
ncurses /usr/include/panel.h    
ncurses /usr/include/term.h
ncurses /usr/include/term_entry.h
ncurses /usr/include/termcap.h
ncurses /usr/include/tic.h
ncurses /usr/include/unctrl.h

ただし、ヘッダーファイルが生成されます(すべての構成に対して必ずしも同じである必要はありません)。したがって、クロスコンパイラパッケージは、コアncursesパッケージとの競合を避けるために、ヘッダファイルに異なるパス名を使用します。

ncursesとのクロスコンパイルをサポートするパッケージがないため、解決策は構成スクリプトで予想​​されるファイル命名規則を使用してこれらのパッケージを開発するようです。 Archはこれに関するチュートリアルを提供していないようですが、コメントこのトピックには、distccの使い方を学ぶのが良いアプローチであるというヒントがあります。アーチ型文書そう始まるんだ

免責事項:現在行っていることがわからない場合、このガイドはあいまいで不完全です。これは意図的なものです。これは、ソフトウェアコンパイルおよびツールチェーンコンポーネントに初めてアクセスするユーザーのために特に設計されていません。

これはArch Linux ARMで使用される公式のクロスコンパイル方法です。多数のパッケージを構築してプロセスを高速化する場合は、次のガイドではx86 LinuxシステムをARMクロスコンパイラに切り替えます。また、ほとんどのクロスコンパイル設定よりはるかに簡単です。

このガイドでは、x86で完全なARM開発環境を構築する必要がないようにdistccを使用します。 distccプロジェクトのウェブサイトに記載されているように、「distccは、すべてのシステムがファイルシステムを共有したり、時計を同期したり、同じライブラリやヘッダをインストールする必要はありません」これは、私たちが必要とするものはより速いシステムで実行するだけであるため、特に有利です。 ARM用クロスコンパイラ。すべての最新ライブラリとヘッダファイルを使用して、ARMマシンでビルドを制御します。

おすすめ記事