サイクルを構成/作成するためにインクルードパスとライブラリパスを追加するにはどうすればよいですか?


83

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に変換しますが、機能していないようです。


4
PATHを除いて、システムのデフォルトのものを上書きすることに注意してください。のようなものを作成するとexport C_INCLUDE_PATH=~/local/include:$C_INCLUDE_PATH、コンパイラは最初に~/local/include、および$ C_INCLUDE_PATHを検索しますが、最初のディレクトリにインクルードが見つからなかった場合に限ります。
マークプラノ-Lesay 2011

回答:


99

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で生成されたconfigureスクリプトを呼び出すたびに、config.siteが読み取られ、すべての割り当てが行われます。CPPFLAGSとLDFLAGSで十分ですが、他の任意の割り当てを行うこともできます(したがって、上記のサンプルの...)。-Iフラグは、コンパイラではなくプリプロセッサを対象としているため、CFLAGSではなくCPPFLAGSに属していることに注意してください。


ウィリアム; おかげで、それは共有ホスト上に構築するためのCPPFLAGSについてのアドバイスに大成功でした。あなたのメモのために、今日の./configureの実行の失敗で多くのスラッシングを節約しました。
ブライアンティフィン2013年

30

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

LDFLAGSとCFLAGSを.bashrcに追加すると、。/ configureがconfigureで失敗します:エラー:Cコンパイラは実行可能ファイルを作成できません...
Lacrymology 2011

それらはおそらく、configure testcodeコンパイラー・パラメーターをオーバーライドしています。makeenvプリフェッチを使用するだけです。また、configureにlibgifをオーバーライドするオプションがまだないかどうかを確認してください。autotoolsスクリプトが適切に作成されている場合、libgifがインストールされているパスを指定できます(たとえば、デフォルトのライブラリの場所を上書きします)。それがよりクリーンなソリューションになります。
long404 2011

同じ違い..tneme @ ws16lab07:〜/ Descargas / emacs-23.3 $ LDFLAGS = "-L / home / tneme / local / lib" CFLAGS = "-l / home / tneme / local / include" ./configure --prefix = "/ home / tneme / local"ビルドシステムタイプをチェックしています... i686-pc-linux-gnuホストシステムタイプをチェックしています... i686-pc-linux-gnugccをチェックしています... gccCコンパイラが機能するかどうかをチェックしています...何のconfigure:エラーなし:で/home/tneme/Descargas/emacs-23.3': configure: error: C compiler cannot create executables See 」config.logの詳細は、トン
Lacrymology

これらは、「構成」するときではなく、「作成する」ときに定義する必要があります。
long404 2011

これらを使用してemacs23を構成しようとしましたが、問題は発生しませんでした:LDFLAGS = "-L / home / me / local / lib" CFLAGS = "-I / home / me / local / include" ./ configurecheckingビルドシステムタイプ... x86_64-unknown-linux-gnuチェックホストシステムタイプ... x86_64-unknown-linux-gnuチェックgcc ... gccチェックCコンパイラデフォルト出力ファイル名... a.outチェックCかどうかコンパイラは動作します...はいクロスコンパイルしているかどうかをチェックしています...実行可能ファイルのサフィックスをチェックしていません...オブジェクトファイルのサフィックスをチェックしています... o
GNUC

8

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

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コンパイラは実行可能ファイルを作成できません」というエラーが発生しました。ビルド環境では、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」でした。すべてのインクルードディレクトリが正しく設定されるまでにはしばらく時間がかかります。クロスコンパイラを指すインクルードとルートファイルシステムのインクルードを指すインクルードが必要な場合があり、競合が発生する可能性があります。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.