Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
twsg:dicas:compila_teogc [2009/09/14 23:51] 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 CMake. Para 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.0, a 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 121: | 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 | |
- | + | ||
+ | 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 146: | 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 a 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 o 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 e 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 o TerraOGC com suporte a PostgreSQL e 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 o CMake de novo e compila: | ||
+ | <code bash> | ||
+ | cmake ../../build/cmake | ||
+ | make | ||
</code> | </code> | ||
- | - Para compilar o TerraOGC com suporte a PostgreSQL na versão release, mas sem precisar compilar a TerraLib (já está feito) <code bash> | + | |
- | qmake TE_DATABASE_OPTION="HAS_POSTGRESQL" ONLY_TEOGC=1 | + | Após compilado, tudo 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. | ||
+ |