web-dev-qa-db-ja.com

include / libパスをconfigure / makeサイクルに追加する方法は?

SuにアクセスできないLinuxボックスにライブラリをインストールする場所が必要です。 〜/ local [/ bin、/ lib、/ include]を使用していますが、。/ configureでライブラリを探すように指示する方法がわかりません(特に、libgifが必要なemacsをコンパイルしようとしています、これは私のディストリビューションにはありません)。

追加してみました

export PATH=$PATH:~/local/bin
export LD_LIBRARY_PATH=~/local/lib
export C_INCLUDE_PATH=~/local/include
export CPLUS_INCLUDE_PATH=~/local/include

.bashrcに移動しますが、機能していないようです。

68
Lacrymology

Config.siteファイルが必要です。試してください:

 $ mkdir -p〜/ local/share 
 $ cat << EOF>〜/ local/share/config.site 
 CPPFLAGS = -I $ HOME/local/include 
 LDFLAGS = -L $ HOME/local/lib 
 ... 
 EOF 

--prefix = $ HOME/localを使用してautoconfで生成された構成スクリプトを呼び出すと、config.siteが読み取られ、すべての割り当てが自動的に行われます。 CPPFLAGSとLDFLAGSが必要なすべてである必要がありますが、他の必要な割り当ても行うことができます(したがって、上記のサンプルで...)。 -Iはコンパイラではなくプリプロセッサ用であるため、-IフラグはCFLAGSではなくCPPFLAGSに属していることに注意してください。

92
William Pursell

Makeを実行するときにLDFLAGSとCFLAGSを設定します。

$ LDFLAGS="-L/home/me/local/lib" CFLAGS="-I/home/me/local/include" make

これを何億回もやりたくない場合は、これらを.bashrc(または同等のシェル)にエクスポートしてください。また、LD_LIBRARY_PATHに/ home/me/local/libが含まれるように設定します。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/local/lib
27
long404

これを正しく行うにはしばらく時間がかかりました。 ARMターゲット用にUbuntuでクロスコンパイルすると、この問題が発生しました。私はそれを解決しました:

PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib ./autogen.sh --build=`config.guess` --Host=armv5tejl-unknown-linux-gnueabihf

CFLAGSはautogen.sh/configureでは使用されず、使用すると「configure:error:C compiler cannot create create」というエラーが表示されます。ビルド環境では、autogen.shスクリプトを使用していました。autogen.shスクリプトがない場合は、上記のコマンドの./autogen.shを./configureに置き換えてください。ターゲットシステムでconfig.guessを実行して、-Hostパラメーターを取得しました。

Autogen.sh/configureを正常に実行した後、次を使用してコンパイルします。

PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib CFLAGS="-march=... -mcpu=... etc." make

使用することを選択したCFLAGSは、「-march = armv5te -fno-tree-vectorize -mthumb-interwork -mcpu = arm926ej-s」です。すべてのインクルードディレクトリを正しく設定するには、しばらく時間がかかります。一部のインクルードがクロスコンパイラを指し、一部のインクルードがルートファイルシステムインクルードを指していると、競合が発生する可能性があります。

これは完璧な答えではないと確信しています。そして、Makefilesで/ ccrootfsではなく/を指しているincludeディレクトリがまだいくつか見られます。これを修正する方法を知りたいです。これが誰かを助けることを願っています。

8
Samuel