如何添加包含和库路径以配置/制作周期?


81

我需要在没有su访问权限的linux框中安装库的地方。我正在使用〜/ 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,但似乎不起作用。


4
请注意,除了PATH外,您将覆盖系统默认值。如果执行类似的操作export C_INCLUDE_PATH=~/local/include:$C_INCLUDE_PATH,则编译器将~/local/include仅在和中搜索$ C_INCLUDE_PATH,前提是编译器未在第一个目录中找到include。
Marc Plano-Lesay

Answers:


98

您需要一个config.site文件。尝试:

$ mkdir -p〜/本地/共享
$ cat << EOF>〜/ local / share / config.site
CPPFLAGS = -I $ HOME /本地/包含
LDFLAGS = -L $ HOME /本地/ lib
...
紧急行动

每当您使用--prefix = $ HOME / local调用autoconf生成的配置脚本时,都会读取config.site并为您进行所有分配。CPPFLAGS和LDFLAGS应该是您所需要的,但是您也可以进行任何其他所需的分配(因此,在上面的示例中...)。请注意,-I标志属于CPPFLAGS而不属于CFLAGS,因为-I用于预处理器而非编译器。


威廉; 谢谢,这是关于CPPFLAGS在共享主机上构建的建议。由于您的注意,今天失败的./configure运行省去了很多麻烦。
Brian Tiffin

29

运行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

当我将LDFLAGS和CFLAGS添加到.bashrc时。/configure失败并带有configure:错误:C编译器无法创建可执行文件...
Lacrymology 2011年

它们可能覆盖了配置测试代码编译器参数。只需使用make env预取。另请尝试查看configure是否还没有覆盖libgif的选项。如果正确制作了自动工具脚本,它将提示您指定安装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-gnu检查gcc ... gcc检查C编译器是否正常工作...没有配置:错误:在/home/tneme/Descargas/emacs-23.3': configure: error: C compiler cannot create executables See config.log中了解更多详细信息t
泪论

这些应该在您“制作”时定义,而不是在“配置”时定义。
long404 2011年

刚刚尝试使用这些配置emacs 23,但我没有遇到这个问题:LDFLAGS =“-L / home / me / local / lib” CFLAGS =“-I / home / me / local / include” ./configure检查构建系统类型... x86_64-unknown-linux-gnu检查主机系统类型... x86_64-unknown-linux-gnu检查gcc ... gcc检查C编译器默认输出文件名... a.out检查是否C编译器有效...是,检查我们是否在交叉编译...不检查可执行文件的后缀...检查对象文件的后缀... o检查我们是否在使用GNU C编译器...是
long404

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编译器无法创建可执行文件”。在构建环境中,如果您没有在上面的命令中用./configure替换./autogen.sh脚本,则可以使用提供的autogen.sh脚本。我在目标系统上运行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。很想知道如何纠正这个问题。希望这对某人有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.