在没有root CentOS的情况下编译geos
Compiling geos without root CentOS
我一直在尝试在受限(无根)环境中编译 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 也会发生这种情况
This happens because GEOS requires PHP header files from the original PHP source, and MAMP does not include those.
编辑 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 的非根环境中编译 geos 时包含我的 php 头文件?
老实说我很迷茫!
我相当确定您的 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
变量添加内容时,您应该将其添加到 beginning 而不是结尾,以便它优先于系统二进制文件。
我还建议您撤消对 ~/local/share/config.site
所做的更改(或者删除文件,如果它不存在),因为那里的选项会影响 all基于 automake 的项目。
您应该将 CPPFLAGS
和 LDFLAGS
作为参数传递给 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
我一直在尝试在受限(无根)环境中编译 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 也会发生这种情况
This happens because GEOS requires PHP header files from the original PHP source, and MAMP does not include those.
编辑 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 的非根环境中编译 geos 时包含我的 php 头文件?
老实说我很迷茫!
我相当确定您的 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
变量添加内容时,您应该将其添加到 beginning 而不是结尾,以便它优先于系统二进制文件。
我还建议您撤消对 ~/local/share/config.site
所做的更改(或者删除文件,如果它不存在),因为那里的选项会影响 all基于 automake 的项目。
您应该将 CPPFLAGS
和 LDFLAGS
作为参数传递给 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