2

グーグルファーストまたはコンサルトのように聞こえるかもしれませんが、私は両方を行いましたが、それでも本当に満足のいく答えが得られませんでした。

次のシナリオを想像してみてください。私のハードドライブには、クロスコンパイルされた RootFileSystem がありi686ます/tftpboot/rfsRFSこれをNFSARM プラットフォームで起動しています。libxmlをコンパイルして、既にインストールされているサーバーを拡張したいと思いsqliteます。私の理解では、 の別の場所を定義するため、私の場合、構成は次のようになります。phpARM-RFSthttpd--prefix/

//libxml

./configure --build=i686-linux --host=arm-926ejs-linux-gnueabi --prefix=/tftpboot/rfs
make
make install


//sqlite
./configure --build=i686-linux --host=arm-926ejs-linux-gnueabi --prefix=/tftpboot/rfs   CFLAGS="-lpthread -lrt -Os -ldl" CPPFLAGS="-DSQLITe_THREADSAFE=1 -DSQLITE_TEMP_STORAGE=3"
make
make install

//php
./configure --build=i686-linux --host=arm-926ejs-linux-gnueabi --target=arm-926ejs-linux-gnueabi --prefix=/tftpboot/rfs
    --with-thttpd=/usr/local/sbin --without-pear --with-pdo-sqlite=/usr/local --disable-all --enable-pdo 
    --with-sqlite3=/usr/local --with-config-file-path=/data --enable-libxml --with-libxml-dir=/usr/local
make
make install

なぜなら:

  • rootfs通常の階層にインストールしたいのですが、 のルートポイントにインストールし/tftpboot/rfsます。
  • thttpdにはすでにインストールされてい/tftpboot/rfsます。だからそこにリンクしたい
  • ???

そのため、絶対パスを使用する必要がある場所と相対パスを使用する必要がある場所がまったくわからないことを認めなければなりません。それとも、私はこれをすべて完全に間違っていますか?

4

1 に答える 1

1

--prefixプログラムをインストールする場所と、インストールされたプログラムが実行時にファイルを検索する場所を configure に指示します。

特定のプロジェクト/プログラムが実行時にプレフィックスを使用しない場合 (多くは使用しません)、それは単なるインストール場所であり、以下は無視できます。通常、インストールされたバイナリのディレクトリ名を grep することで、コンパイル済みプログラムでプレフィックスが使用されているかどうかを確認できます(固有のプレフィックスで実験的なインストールを実行してみてください)。ただし、ファイルにデバッグ情報がある場合は機能しない可能性があります。

それ以外の場合、コンパイルした別の場所から実行したい場合は、次のトリックがあります。

仮定:

  • /usr/binターゲット システムのビューから実行したい。
  • /tftpboot/rfs/usr/binビルド システムのビューの下にインストールします。

手順:

./configure --prefix=/usr --build=i686-linux --host=arm-926ejs-linux-gnueabi
make
make DESTDIR=/tftpboot/rfs install

警告:DESTDIRは従来の名前ですが、一部のプロジェクトでは別の名前を選択する場合があります (または何も選択しない場合、makefile をハッキングしてください)。

于 2012-04-25T15:30:27.957 に答える