Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
twsg:dicas:compila_teogc [2009/12/18 16:25]
emerson
twsg:dicas:compila_teogc [2018/01/29 23:35] (current)
emerson [Corrigir fontes TerraLib 422]
Line 1: Line 1:
 ====== Compilando o TerraOGC no Linux ====== ====== Compilando o TerraOGC no Linux ======
  
-===== Variáveis de ambiente ===== +Arquivo atualizado ​para o uso do CMakePara QMake, ​verifique as versões anteriores ​deste documento.
- +
-Antes de compilar o TerraOGC, é necessário ajustar algumas variáveis de ambiente, normalmente no arquivo ''​~.bashrc''​. Coloque neste arquivo a seguinte configuração:​ +
- +
-<code bash> +
-# TerraLib Devel +
-TERRALIB_DIR=/​home/​emerson/​projetos/​terralib +
- +
-LD_LIBRARY_PATH=$LD_LIBRARY_PATH:​$TERRALIB_DIR/​terralibx/​Release +
-LD_LIBRARY_PATH=$LD_LIBRARY_PATH:​$TERRALIB_DIR/​extensions/​terramanager/​lib +
-LD_LIBRARY_PATH=$LD_LIBRARY_PATH:​$TERRALIB_DIR/​extensions/​terraOGC/​lib +
- +
-export LD_LIBRARY_PATH +
-</​code>​ +
- +
-**Troque** a variável ''​TERRALIB_DIR''​ pelo valor usado no seu sistema. Antes de usar essas configurações você precisa abrir um novo terminal ​para que as alterações tenham efeito. +
- +
-Só lembrar que o uso de ''​LD_LIBRARY_PATH''​ é para ambientes de **programação**Em ambientes de **produção** é melhor deixar as libs em pastas reconhecidas pelo linker. Mais detalhes neste [[http://​blogs.sun.com/​rie/​date/​20040710|artigo]] ou [[http://​xahlee.org/​UnixResource_dir/​_/​ldpath.html|este]]. +
- +
-==== TerraLib debug ==== +
- +
-Caso queira usar a TerraLib no modo Debug, troque a linha: <code bash> +
-LD_LIBRARY_PATH=$LD_LIBRARY_PATH:​$TERRALIB_DIR/​terralibx/​Release +
-</​code>​ +
-por: <code bash> +
-LD_LIBRARY_PATH=$LD_LIBRARY_PATH:​$TERRALIB_DIR/​terralibx/​Debug +
-</​code>​ +
- +
- +
- +
-===== Configurando o QMake ===== +
- +
-==== TerraLib 3.2.1 e anteriores ==== +
- +
-Antes da TerraLib 3.3.0a biblioteca TIFF usava o nome libtiff para linkar com o sistema. Isso gerava um conflito com a libtiff do sistema. Em consequência faz-se necessário,​ **para ​versões anteriores ​da TerraLib** corrigir alguns arquivos. +
- +
-Os projetos TerraOGC forma adaptados para a versão 3.3.0 da TerraLib. Caso queira compilar nas versões anteriores basta trocar as linhas abaixo nos arquivos ''​terraOGC/​build/​linux/​*cgi/​*.pro''​. +
- +
-De: +
-<​code>​ +
-LIBS += -L../​../​../​../​../​terralibx/​lib -lterralibtiff +
-</​code>​ +
-Para: +
-<​code>​ +
-LIBS += -L../​../​../​../​../​terralibx/​lib -ltiff +
-</​code>​ +
- +
-=== Mandriva 2007 x86 === +
- +
-  * No Mandriva, precisa alterar o arquivo ''/​usr/​lib/​qt3/​mkspecs/​linux-g++/​qmake.conf'',​ tirando o ''/​usr/​lib''​ da linkagem. Troque as linhas <​code>​ +
-QMAKE_LIBDIR_X11 = /usr/lib +
-QMAKE_LIBDIR_OPENGL = /usr/lib +
-</​code> ​ por <​code>​ +
-QMAKE_LIBDIR_X11 =  +
-QMAKE_LIBDIR_OPENGL =  +
-</​code>​ +
- +
-=== OpenSuse 11.0 x86_64 === +
- +
-  * No OpenSuse 11.0 precisa alterar o arquivo ''/​usr/​lib/​qt3/​mkspecs/​default/​qmake.conf'',​ tirando o ''/​usr/​lib''​ da linkagem. Troque as linhas <​code>​ +
-QMAKE_LIBDIR ​           = /​usr/​lib64/​ +
-QMAKE_LIBDIR_OPENGL ​    = /​usr/​lib64/​ +
-</​code> ​ por <​code>​ +
-QMAKE_LIBDIR ​         =  +
-QMAKE_LIBDIR_OPENGL =  +
-</​code>​ +
- +
- +
-==== Outras distros ==== +
- +
-=== CentOS 5.2 x86 === +
- +
-O CentOS não configura o ''/​usr/​include''​ por padrão quando usando o QMake. Para consertar edite o arquivo ''/​usr/​lib/​qt-3.3/​mkspecs/​linux-g++/​qmake.conf''​. +
- +
-De: +
-<​code>​ +
-QMAKE_INCDIR ​           = +
-</​code>​ +
-Para: +
-<​code>​ +
-QMAKE_INCDIR ​           = /​usr/​include +
-</​code>​ +
- +
- +
-===== GCC 4 ===== +
- +
-O GCC (GNU C Compiler) em sua versão 4 e posteriores está adotando características do C++0x (versão ainda não homologada pela ISO). Em consequência,​ vários //​warnings//​ começaram a aparecer na compilação. Você pode encontrar algo nos links: [[http://​gcc.gnu.org/​ml/​gcc-help/​2007-06/​msg00153.html|Referência]] e [[http://​gcc.gnu.org/​onlinedocs/​gcc-4.2.0/​gcc/​Warning-Options.html#​index-Wreturn_002dtype-230|manual]] +
  
 ===== Dependências ===== ===== Dependências =====
Line 101: Line 14:
   * cURL (API Web Client)   * cURL (API Web Client)
   * LibZip (API p/ PKZip): Algumas distros não têm. Então baixe [[http://​www.nih.at/​libzip/​index.html|aqui]].   * LibZip (API p/ PKZip): Algumas distros não têm. Então baixe [[http://​www.nih.at/​libzip/​index.html|aqui]].
 +  * Boost Regexp (regular expressions)
  
 ==== Mandriva ==== ==== Mandriva ====
Line 111: Line 25:
   * cURL: libcurl4, libcurl-devel   * cURL: libcurl4, libcurl-devel
   * LibZip: libzip, libzip1-devel   * LibZip: libzip, libzip1-devel
- 
  
  
Line 122: Line 35:
   * Apache Xerces: Xerces-c, libXerces-c-devel   * Apache Xerces: Xerces-c, libXerces-c-devel
   * cURL: libcurl4, libcurl-devel   * cURL: libcurl4, libcurl-devel
-  * LibZip: libzip1 e libzip-devel +  * LibZip: libzip1 e libzip-devel ​(libzip2 no OpenSUSE 13.2) 
- +  * Boost: boost, boost-devel
-=== 11.2 === +
- +
-  * libqt4-devel: para obter o QMake +
- +
- +
  
 +Obs: a partir da versão 12.3 do OpenSUSE recomenda-se adicionar o repositório [[http://​download.opensuse.org/​repositories/​Application:/​Geo/​|App:​Geo]] e instalar o libgeotiff-devel,​ com os fontes da LibGeoTIFF, e libjpeg8-devel.
 ==== CentOS ==== ==== CentOS ====
  
Line 151: Line 59:
  
  
 +==== Debian 5 ====
  
-===== Projeto all =====+  * GD: libgd2-xpm, libgd2-xpm-dev 
 +  * ZLib: zlib1g, zlib1g-dev 
 +  * PostgreSQL: postgresql, postgresql-client,​ postgresql-contrib,​ libpq5, libpq-dev 
 +  * Apache: apache2 
 +  * Apache Xerces: libxerces-c28,​ libxerces-c2-dev 
 +  * cURL: libcurl3, libcurl4-openssl-dev 
 +  * LibZip: libzip1, libzip-dev 
 +  * Boost Regexp: libboost-regex,​ libboost-regex-dev
  
-  * Vá para a pasta ''​terraOGC/​build/​linux/​all''​ + 
-  * Execute ​o //QMake// e em seguida o //Make// da seguinte forma: <code bash> +===== TerraLib ===== 
-qmake TE_DATABASE_OPTION="​$1"​ TE_PROJECT_TYPE="​$2" + 
-make+Obtendo e compilando ​TerraLib. 
 + 
 +Procedimento usando na versão 4.2.2, mas pode ser usada em outras versões posteriores com as devidas adaptações. 
 +\\ 
 + 
 +Crie uma pasta ''​projetos'' ​e crie a pasta para a TerraLib. Baixe a última TAG estável (nesse caso a 4.2.2). Use CMake para compilar o projeto. 
 + 
 +<code bash> 
 +mkdir terralib422 
 +cd terralib422 
 +svn export https://svn.dpi.inpe.br/terralib/tags/v-4-2-2/build 
 +svn export https://svn.dpi.inpe.br/​terralib/​tags/​v-4-2-2/​src 
 +svn export https://​svn.dpi.inpe.br/​terralib/​tags/​v-4-2-2/​extensions ​ 
 + 
 +mkdir cmake && cd cmake 
 +cmake ../​build/​cmake
 </​code>​ </​code>​
-  * Substitua $1 e $2 de acordo com a tabela abaixo: 
  
-^        Opção ​       ^       ​$1 ​       ^         ​$2 ​        ^ +Após gerar esse código, é necessário mudar alguns parâmetros no arquivo ''​terralib/​cmake/​CMakeCache.txt''​. Alguns caminhos talvez precisem ser adaptados ao seu sistema:
-| SGBD MySQL          | HAS_MYSQL ​      ​| ​                   | +
-| SGBD PostgreSQL ​    | HAS_POSTGRESQL ​ |                    | +
-| SGBD MySQL e PostgreSQL | HAS_MYSQL HAS_POSTGRESQL |       | +
-| Versão release ​     |                 | RELEASE (default) ​ | +
-| Versão debug        |                 | DEBUG              |+
  
-  ​* Os projetos ​da TerraLib e do TerraManager serão compilados também ​(se ainda não foram+  ​- BUILD_TERRAMANAGER=ON 
-  ​* Para gerar o Makefile apenas para o TerraOGC, adicione mais um parâmetro na chamada ​do qmake+  - BUILD_TERRAVIEW=OFF 
- <​code ​bash+  - CMAKE_PROJECT_NAME=terralib 
-qmake TE_DATABASE_OPTION="$1" ​TE_PROJECT_TYPE="$2" ​ONLY_TEOGC=1+  - GeoTIFF_INCLUDE_DIR=/​usr/​include/​libgeotiff 
 +  - PostGIS_INCLUDE_DIR=/​usr/​include/​pgsql 
 +  - SQLite_ENABLED=OFF 
 +  - TE_DTM_ENABLED=OFF 
 +  - TE_DXF_ENABLED=OFF 
 +  - TE_PDI_ENABLED=OFF 
 +  - TE_QT3_DRIVERS_ENABLED=OFF 
 +  - TE_QWT3_DRIVERS_ENABLED=OFF 
 +  - TE_SPL_ENABLED=OFF 
 +  - TE_STAT_ENABLED=OFF 
 +  - ZLIB_LIBRARIES:​FILEPATH=/​lib64/​libz.so.1 
 + 
 +Rodar o cmake de novo: 
 +<code bash>​cmake ../​build/​cmake</​code>​ 
 + 
 +e verificar se há algum erro de compilação. No meu ambiente eu ignorei a GDAL e diversas outras libs não usadas pelo TerraOGC. 
 + 
 +==== Corrigir fontes TerraLib 422 ==== 
 + 
 +Corrigir os seguintes arquivos ​da TerraLib ​4.2.2: 
 + 
 +Inserir a tag: <code C++>#​include <​unistd.h>​ </​code>​ 
 +em src/​terralib/​kernel/​TeConnectionPool.cpp ​src/​terralib/​kernel/​yyTemporal.cpp 
 + 
 +Trocar o EPSG no arquivo TeProjection.cpp:​ 
 +4979 -> 4326 (Linhas 186 e 1435
 + 
 +===TePostgreSQL.cpp=== 
 +Corrigir a linha  ​do ​arquivo TePostgreSQL.cpp
 + 
 +L728: <​code ​C++>​createTable += "​\""​ + (*it).rep_.name_ + "​\"​ ";</​code
 +L1030: <code C++> string q = "INSERT INTO "+tableName + " ( \""​+ attrs+"​\"​) " + " VALUES ("​+values+"​) ";</​code>​ 
 +L977: <code C++> attrs += "\" ​, \"";</​code>​ 
 + 
 +===TePostGIS.cpp=== 
 +Corrigir o arquivo TePostGIS.cpp:​ 
 +L334: <code C++>​createTable += "​\""​ + (*it).rep_.name_ + "​\"​ ";</​code>​ 
 +L1484: <code C++>​create = "​CREATE INDEX sp_idx_"​ + table + " ON " + table + " USING GIST (" + column + "​)";</​code>​ 
 + 
 +Esta última observação parece (L1484) ser aplicável ao PostGIS 2+. 
 + 
 +Depois é só compilar 
 +<code bash>​make</​code>​ 
 + 
 +===== TerraOGC ===== 
 + 
 +Obtendo e compilando o TerraOGC. Você pode baixar a versão do TerraOGC compatível com a versão do TerraLib que você usa. Para a última versão usar o ''​trunk''​ do SVN. 
 +\\ 
 + 
 + 
 +Baixa o TerraOGC 
 +<code bash> 
 +cd projetos 
 +svn co https://​svn.dpi.inpe.br/​terraogc/​trunk/​ terraogc
 </​code>​ </​code>​
-  * Este //flag// é útil para desenvolvimento,​ quando é necessário um //​rebuild-all//​ no projeto (''​make clean && make''​),​ mas sem precisar compilar a TerraLib e o TerraManager novamente. 
  
 +Prepara a TerraLib: duas opções, mover ou linkar. Para DEV melhor linkar.
 +<code bash>
 +cd terraogc
 +mkdir lib && cd lib
 +ln -s ../​../​terralib422/​cmake/​libterramanager.so .
 +ln -s ../​../​terralib422/​cmake/​libterralib.so .
 +ln -s ../​../​terralib422/​cmake/​libterralib_shp.so .
 +</​code>​
  
 +E ajusta no ~/bashrc:
 +<code bash>​export LD_LIBRARY_PATH=<​your_path>​projetos/​terraogc/​lib</​code>​
  
-==== Exemplos ====+Na produção, mover para lib. 
 +\\
  
-  - Para compilar ​o TerraOGC ​com suporte a PostgreSQL e na versão release: ​<code bash> +Após isso, rodar o cmake para o TerraOGC. Ele será armazenado ​na pasta terraogc/​bin,​ para evitar misturar com os demais pacotes de desenvolvimento. 
-qmake TE_DATABASE_OPTION="​HAS_POSTGRESQL"​+ 
 +<code bash> 
 +cd terraogc/​bin 
 +mkdir cmake && cd cmake 
 +cmake ../​../​build/​cmake
 </​code>​ </​code>​
-  ​Para compilar ​TerraOGC com suporte a PostgreSQL ​MySQL na versão debug <code bash> + 
-qmake TE_DATABASE_OPTION="​HAS_POSTGRESQL HAS_MYSQL"​ TE_PROJECT_TYPE="​DEBUG"​+Editar o ''​terraogc/​bin/​cmake/​CMakeCache.txt''​. Aqui são poucos parâmetros para ajuste: 
 + 
 +  ​CURL_LIBRARY=/​usr/​lib64/​libcurl.so.4 
 +  - GeoTIFF_INCLUDE_DIR=/​usr/​include/​libgeotiff 
 + 
 +Roda CMake de novo compila: 
 +<code bash> 
 +cmake ../​../​build/​cmake 
 +make
 </​code>​ </​code>​
-  - Para compilar o TerraOGC com suporte a PostgreSQL na versão releasemas sem precisar compilar a TerraLib (já está feito) ​<code bash> + 
-qmake TE_DATABASE_OPTION="HAS_POSTGRESQL" ​ONLY_TEOGC=1+Após compiladotudo fica nas subpastas do ''​terraogc/​bin/​cmake/''​. Duas opções, mover ou linkar. Para DEV melhor linkar. 
 +<code bash> 
 +cd terraogc/​lib 
 +find ../​bin/​cmake -name "*.so" ​-exec ln -s {} . \; 
 +cd terraogc/​bin 
 +find cmake -name "​*.cgi"​ -exec ln -s {} . \;
 </​code>​ </​code>​
 +
 +Na produção, copiar ou mover para bin e lib ao invés de linkar.
 +

Navigation