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 [2010/03/04 10:29]
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 ======
  
- +Arquivo atualizado ​para o uso do CMakePara QMake, ​verifique as versões anteriores ​deste documento.
-===== Variáveis de ambiente ===== +
- +
-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/​../​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 102: 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 112: Line 25:
   * cURL: libcurl4, libcurl-devel   * cURL: libcurl4, libcurl-devel
   * LibZip: libzip, libzip1-devel   * LibZip: libzip, libzip1-devel
- 
  
  
Line 123: 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 57:
     - O default é instalar tudo no ''/​usr/​local/'',​ inclusive o zip.h     - O default é instalar tudo no ''/​usr/​local/'',​ inclusive o zip.h
   * Extras: glibc-headers para código em C   * Extras: glibc-headers para código em C
- 
- 
- 
  
  
Line 165: Line 68:
   * cURL: libcurl3, libcurl4-openssl-dev   * cURL: libcurl3, libcurl4-openssl-dev
   * LibZip: libzip1, libzip-dev   * LibZip: libzip1, libzip-dev
 +  * Boost Regexp: libboost-regex,​ libboost-regex-dev
  
  
 +===== TerraLib =====
  
-===== Projeto all =====+Obtendo e compilando a TerraLib.
  
-  * Vá para a pasta ''​terraOGC/​build/​linux/​all''​ +Procedimento usando na versão 4.2.2, mas pode ser usada em outras versões posteriores com as devidas adaptações. 
-  * Execute ​o //QMake// e em seguida o //Make// da seguinte forma: <code bash> +\\ 
-qmake TE_DATABASE_OPTION="​$1"​ TE_PROJECT_TYPE="​$2" + 
-make+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 ​       ^       $       ​^ ​        $        ^ +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 ​ |                    | +  - BUILD_TERRAMANAGER=ON 
-| SGBD MySQL PostgreSQL | HAS_MYSQL HAS_POSTGRESQL |       | +  - BUILD_TERRAVIEW=OFF 
-| Versão release ​     |                 | RELEASE ​(default)  ​| +  - CMAKE_PROJECT_NAME=terralib 
-| Versão debug        |                 | DEBUG              |+  - 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>​
  
-  * Os projetos da TerraLib e do TerraManager serão compilados também ​(se ainda não foram+Esta última observação parece ​(L1484ser aplicável ao PostGIS 2+. 
-  ​* ​Para gerar Makefile apenas para o TerraOGC, adicione mais um parâmetro na chamada do qmake+ 
- <​code bash> +Depois é só compilar 
-qmake TE_DATABASE_OPTION="​$1"​ TE_PROJECT_TYPE="​$2"​ ONLY_TEOGC=1+<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 ''​trunk''​ do SVN. 
 +\\ 
 + 
 + 
 +Baixa o TerraOGC 
 +<code bash> 
 +cd projetos 
 +svn co https://​svn.dpi.inpe.br/​terraogc/​trunk/​ terraogc 
 +</​code>​ 
 + 
 +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>​ </​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. 
  
 +E ajusta no ~/bashrc:
 +<code bash>​export LD_LIBRARY_PATH=<​your_path>​projetos/​terraogc/​lib</​code>​
  
 +Na produção, mover para lib.
 +\\
  
-==== Exemplos ====+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.
  
-  - Para compilar o TerraOGC com suporte a PostgreSQL e na versão release: ​<code bash> +<code bash> 
-qmake TE_DATABASE_OPTION="​HAS_POSTGRESQL"​+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