【问题标题】:Compiling geos without root CentOS在没有根 CentOS 的情况下编译 geos
【发布时间】:2015-07-24 14:20:49
【问题描述】:

我一直在尝试在受限(无根)环境中编译 geos,但遇到了一些困难......

我做了以下

wget http://download.osgeo.org/geos/geos-3.4.2.tar.bz2
tar jxf geos-3.4.2.tar.bz2
cd geos-3.4.2
nano ~/.bash_profile
# I added PATH=$PATH:$HOME/local/bin export PATH
./configure --enable-php --prefix=$HOME/local/ && make clean && make

我收到以下错误

Making all in php
make[2]: Entering directory `/home/myname/test/geos-3.4.2/php'
Making all in .
make[3]: Entering directory `/home/myname/test/geos-3.4.2/php'
/bin/sh ../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I../include -I../include/geos   `/usr/local/bin/php-config --includes` -DCOMPILE_DL_GEOS -I../capi -I../include -I./opt/alt/php53/usr/include/ -pedantic -Wall -ansi -Wno-long-long  -ffloat-store -std=gnu99 -g -O2 -MT geos_la-geos.lo -MD -MP -MF .deps/geos_la-geos.Tpo -c -o geos_la-geos.lo `test -f 'geos.c' || echo './'`geos.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I../include -I../include/geos -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -DCOMPILE_DL_GEOS -I../capi -I../include -I./opt/alt/php53/usr/include/ -pedantic -Wall -ansi -Wno-long-long -ffloat-store -std=gnu99 -g -O2 -MT geos_la-geos.lo -MD -MP -MF .deps/geos_la-geos.Tpo -c geos.c  -fPIC -DPIC -o .libs/geos_la-geos.o
geos.c:26:17: error: php.h: No such file or directory
geos.c:27:54: error: ext/standard/info.h: No such file or directory
geos.c:28:72: error: Zend/zend_exceptions.h: No such file or directory

根据一些 github,这也发生在 MAMP 上

发生这种情况是因为 GEOS 需要来自原始 PHP 源的 PHP 头文件,而 MAMP 不包括这些。

编辑 1:

我也在 ~/local/share/config.site 中添加了这个

CPPFLAGS=-I./opt/alt/php53/usr/include/
LDFLAGS=-L$HOME/local/lib

php.h 位于此处:./opt/alt/php53/usr/include/php/main/php.h

info.h:./opt/alt/php53/usr/include/php/ext/standard/info.h

zend_exceptions.h:./opt/alt/php53/usr/include/php/Zend/zend_exceptions.h

编辑 2:

最后一件事:我的 ./configure 告诉我这一点

checking for php-config... /usr/local/bin/php-config
checking for php... /usr/local/bin/php

所以我的问题是,如果我在正确的轨道上解决这个问题,我如何在 centOs 的非 root 环境中编译 geos 时包含我的 php 头文件?

说实话,我很迷茫!

【问题讨论】:

  • PATH='$HOME/local/bin:$PATH' 带单引号是一个错误,会破坏事情。幸运的是,~/.bash_rc 不是正确的文件,因此您没有看到损坏(但如果您使用echo "$PATH",您还会看到您的添加不起作用,除非它碰巧已经存在)。您需要在分配中使用双引号才能扩展变量。
  • 我的解释有误,其实我在.bash_profile PATH=$PATH:$HOME/local/bin export PATH987654331@中添加了这个
  • 在一行上也是一个错误,但原因不同。在一行中,分配仅适用于export 调用......但实际上这恰好巧合地工作,但它仍然不正确。那应该是两条线。无论如何,这与您的问题无关。
  • 我们不能在这里给你一个普遍适用的答案,因为细节很大程度上取决于你使用的网络主机和他们配置系统的方式。您向他们寻求帮助了吗?
  • 是的,他们唯一的答案是您需要 root 访问权限来编译和安装未提供的 php 扩展。请考虑升级到专用服务器或 VPS。 (这意味着每月 15 到 80 美元)顺便说一句。

标签: php compilation centos geos


【解决方案1】:

我相当确定您的 PHP 安装路径不是. 开头 - 无论如何都不是从 geos-3.4.2 文件夹内开始,当然也不是从任意源文件夹内开始。
您应该使该路径成为绝对路径。

我假设opt 文件夹位于您的用户文件夹中,因此完整路径为$HOME/opt/alt/php53/usr/ 感谢您的澄清,完整路径应为/opt/alt/php53/usr/
您需要将bin 文件夹添加到PATH 变量,将include 文件夹添加到CPPFLAGS,将lib 文件夹添加到LDFLAGS
对于$HOME/local/,这不是必需的,因为那是PREFIX,并且会自动添加。
另请注意,将内容添加到 PATH 变量时,应将其添加到 开始 而不是结尾,以便它优先于系统二进制文件。

我还建议您撤消对 ~/local/share/config.site 所做的更改(或删除该文件,如果它不存在),因为那里的选项会影响 所有 基于 automake 的项目。
您应该将CPPFLAGSLDFLAGS 作为参数传递给configure

毕竟,你的命令块应该是这样的:

wget http://download.osgeo.org/geos/geos-3.4.2.tar.bz2
tar jxf geos-3.4.2.tar.bz2
cd geos-3.4.2
export PATH="/opt/alt/php53/usr/bin:$PATH"
./configure --enable-php --prefix="$HOME/local" CPPFLAGS="-I/opt/alt/php53/usr/include" LDFLAGS="/opt/alt/php53/usr/lib" && make clean && make

【讨论】:

  • 目前,正在尝试和编译您的解决方案。 . 是使用 find 命令找到的。并且 php 安装在根文件夹中,意思是/opt/alt/php53/user/bin。结果修改了您的解决方案。仍在等待编译结束。不过感谢您的提醒。是的,我根据我的谷歌研究创建了 config.site,哈哈。我不习惯编译东西
  • 好的,更新了我的答案。仅供参考,以./ 开头的路径是相对于当前目录的,因此在另一个目录中使用它们时必须重新计算它们 - 或者只是将它们设为绝对,因为大多数构建系统(我遇到过)无法处理相对无论如何都是路径。
猜你喜欢
  • 2015-03-12
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 2015-05-19
  • 2018-09-03
相关资源
最近更新 更多