如何添加include和lib路径来配置/ make循环?

时间:2011-09-26 21:25:25

标签: bash makefile linker configure autoconf

我需要一个在linux框中安装库的地方我没有su访问权限。我正在使用〜/ local [/ bin,/ lib,/ include],但我不知道如何告诉./configure在那里寻找库(特别是,我正在尝试编译emacs,这需要libgif ,这不是我的发行版。)

我尝试添加

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

到.bashrc但它似乎不起作用。

3 个答案:

答案 0 :(得分:91)

您需要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标志属于CPPFLAGS而不属于CFLAGS,因为-I用于预处理器而不是编译器。

答案 1 :(得分:27)

运行make:

时设置LDFLAGS和CFLAGS
$ LDFLAGS="-L/home/me/local/lib" CFLAGS="-I/home/me/local/include" make

如果您不想这么做几十次,请在.bashrc(或等效的shell)中导出这些内容。还要将LD_LIBRARY_PATH设置为包含/ home / me / local / lib:

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

答案 2 :(得分: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的包含目录。很想知道如何纠正这个问题。希望这有助于某人。