Gerar executável de programa c++ que utiliza bibliotecas externas

1. Gerar executável de programa c++ que utiliza bibliotecas externas

Weverton de Araújo Apolinário
TonJuan

(usa Ubuntu)

Enviado em 05/04/2013 - 08:26h

Olá amigos, escrevi um código em C++ de uma simples aplicação em Realidade Aumentada, utilizando as bibliotecas ArUco e o OpenCV. Depois que escrevi o código, gostaria de compilá-lo no terminal do Linux (distro Ubuntu) para criar o executável, mas não sei ao certo como fazer isso. Sei que quando escrever a linha de código no terminal, devo especificar quais as bibliotecas externas que estou utilizando (no caso, ArUco e OpenCV). Com o OpenCV eu sei como se deve proceder:

g++ -o NomeDoExecutável NomeDoPrograma.cpp `pkg-config opencv --cflags --libs`

Entretanto, não sei como encaixar a biblioteca ArUco nessa linha de código. Se eu simplesmente escrever o código acima, recebo a mensagem de erro

aruco_test.cpp:31:19: fatal error: aruco.h: No such file or directory

O que é plausível, já que eu não especifiquei na linha de código que estava utilizando a biblioteca ArUco (como fiz com o opencv).

Alguém poderia me ajudar? Ainda sou iniciante no linux.
Obrigado.


  


2. Re: Gerar executável de programa c++ que utiliza bibliotecas externas

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 05/04/2013 - 08:43h

TonJuan escreveu:

Olá amigos, escrevi um código em C++ de uma simples aplicação em Realidade Aumentada, utilizando as bibliotecas ArUco e o OpenCV. Depois que escrevi o código, gostaria de compilá-lo no terminal do Linux (distro Ubuntu) para criar o executável, mas não sei ao certo como fazer isso. Sei que quando escrever a linha de código no terminal, devo especificar quais as bibliotecas externas que estou utilizando (no caso, ArUco e OpenCV). Com o OpenCV eu sei como se deve proceder:

g++ -o NomeDoExecutável NomeDoPrograma.cpp `pkg-config opencv --cflags --libs`

Entretanto, não sei como encaixar a biblioteca ArUco nessa linha de código. Se eu simplesmente escrever o código acima, recebo a mensagem de erro

aruco_test.cpp:31:19: fatal error: aruco.h: No such file or directory

O que é plausível, já que eu não especifiquei na linha de código que estava utilizando a biblioteca ArUco (como fiz com o opencv).

Alguém poderia me ajudar? Ainda sou iniciante no linux.
Obrigado.


As bibliotecas externas já devem está especificadas no código. Para uma compilação correta basta o comando:

g++ codigo.cpp -o executavel




3. Re: Gerar executável de programa c++ que utiliza bibliotecas externas

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 05/04/2013 - 08:47h

Para inserir a biblioteca no código, basta escrever no início:

#include <aruco.h>

Mas claro, a biblioteca tem que está instalada no sistema não é.


4. Re: Gerar executável de programa c++ que utiliza bibliotecas externas

Weverton de Araújo Apolinário
TonJuan

(usa Ubuntu)

Enviado em 05/04/2013 - 22:39h

rei_astro escreveu:

Para inserir a biblioteca no código, basta escrever no início:

#include <aruco.h>

Mas claro, a biblioteca tem que está instalada no sistema não é.


Já havia instalado a biblioteca (pelo tutorial http://www.linuxhispano.net/2012/11/19/instalar-aruco-ubuntu-linux/) e incluído o aruco.h no código do programa.

Quando no terminal escrevo:

g++ -o aruco_test aruco_test.cpp

Aparece "aruco_test.cpp:31:19: fatal error: aruco.h: No such file or directory".

Acredito que seja porque devo incluir na linha de código no terminal que estou utilizando a biblioteca ArUco.

Suponho isso porque quando vou gerar o executável de um programa que utiliza o OpenCV e só escrevo "g++ -o programaOpenCV programaOpenCV.cpp", (sem o `pkg-config opencv --cflags --libs`) aparece a mensagem "fatal error: cv.h: No such file or directory".

Então além de eu escrever "g++ -o NomeDoExecutável NomeDoPrograma.cpp `pkg-config opencv --cflags --libs`", preciso incluir a biblioteca ArUco nessa linha de código, correto?

P.s: Sei que o arquivo aruco.h está localizado na pasta /usr/local/include/aruco.


5. Re: Gerar executável de programa c++ que utiliza bibliotecas externas

Perfil removido
removido

(usa Nenhuma)

Enviado em 05/04/2013 - 23:59h

Tenta de novo esse seu comando:

g++ -o NomeDoExecutável NomeDoPrograma.cpp `pkg-config opencv --cflags --libs`

e #include <aruco.h> você já colocou, faça igual com cv.h:

#include <aruco.h>
#include <aruco.h>


Deve aparecer sobre a falta de mais alguma. Teoricamente você apenas deveria inserir o #include.

OpenCV está instalado?

Mais uma coisa: dê uma olhada neste diretório: /usr/lib/pkgconfig/

Lá deve ter um arquivo com alguma coisa que tenha aruco em parte do nome.

Não tenho certeza se por você ter seguido o tutorial de instalação do site que você viu se as coisas que foram instaladas foram parar em /usr/local

Por exemplo: poderia ter um desses arquivos *.h dentro de /usr/local/include ou alguma bibliotaca dentro de /usr/local/lib se quando você usou make install tudo foi mandado prá /usr/local.


6. Re: Gerar executável de programa c++ que utiliza bibliotecas externas

Weverton de Araújo Apolinário
TonJuan

(usa Ubuntu)

Enviado em 06/04/2013 - 09:16h

Vamos lá, por partes:

Listeiro 037 escreveu:

Tenta de novo esse seu comando:

g++ -o NomeDoExecutável NomeDoPrograma.cpp `pkg-config opencv --cflags --libs`

e #include <aruco.h> você já colocou, faça igual com cv.h:

#include <aruco.h>
#include <aruco.h>


Deve aparecer sobre a falta de mais alguma. Teoricamente você apenas deveria inserir o #include.


Incluí o
#include <cv.h> 
e
#include <opencv/cv.h> 
, continua aparecendo a mesma mensagem de erro:

aruco_test.cpp:32:19: fatal error: aruco.h: No such file or directory
compilation terminated.


(se eu não colocar o `pkg-config opencv --cflags --libs`, aparece que o cv.h que não é encontrado)



OpenCV está instalado?


Sim, está instalado. Segui esse tutorial: http://www.samontab.com/web/2012/06/installing-opencv-2-4-1-ubuntu-12-04-lts/


Mais uma coisa: dê uma olhada neste diretório: /usr/lib/pkgconfig/

Lá deve ter um arquivo com alguma coisa que tenha aruco em parte do nome.


Infelizmente não tem nada que tem aruco no nome, tem o seguinte:

dbus-python.pc IlmBase.pc libxine.pc notify-python.pc pm-utils.pc python.pc xorg-wacom.pc
ibus-table.pc libquvi-scripts.pc nautilus-sendto.pc OpenEXR.pc python-2.7.pc tbb.pc


Já em /usr/local/lib/pkgconfig, tem apenas opencv.pc, acho que deveria ter algum aruco.pc aqui :/

Não tenho certeza se por você ter seguido o tutorial de instalação do site que você viu se as coisas que foram instaladas foram parar em /usr/local

Soube que o aruco.h está lá pois saí procurando.


Por exemplo: poderia ter um desses arquivos *.h dentro de /usr/local/include ou alguma bibliotaca dentro de /usr/local/lib se quando você usou make install tudo foi mandado prá /usr/local.


Tem um .h dentro de /usr/local/include/aruco. Em /usr/local/lib tem as bibliotecas libaruco.so, libaruco.so.1.2, libaruco.so.1.2.4.




7. Re: Gerar executável de programa c++ que utiliza bibliotecas externas

Perfil removido
removido

(usa Nenhuma)

Enviado em 06/04/2013 - 20:41h

É para pkg-config estar reconhecendo aquele arquivo isolado em /usr/local/lib/pkgconfig

Resta fazer seu sistema encontrar estes arquivos no /usr/local.

Em /etc/ld.so.conf deve ter uma linha que faça menção à /usr/local, ou então em um dos arquivos de /etc/ld.so.conf.d/

Se estiver tudo ok, essas bibliotecas de /usr/local/lib foram identificadas quando você executou sudo ldconfig.


8. Re: Gerar executável de programa c++ que utiliza bibliotecas externas

Weverton de Araújo Apolinário
TonJuan

(usa Ubuntu)

Enviado em 07/04/2013 - 09:09h

Listeiro 037 escreveu:

É para pkg-config estar reconhecendo aquele arquivo isolado em /usr/local/lib/pkgconfig


Não entendi, em /usr/local/lib/pkgconfig não existe nenhum arquivo do aruco, só tem um arquivo do opencv (opencv.pc). Não entendi porque você disse "...estar reconhecendo aquele arquivo isolado..." se não existe nenhum arquivo isolado do aruco.


Em /etc/ld.so.conf deve ter uma linha que faça menção à /usr/local, ou então em um dos arquivos de /etc/ld.so.conf.d/

Se estiver tudo ok, essas bibliotecas de /usr/local/lib foram identificadas quando você executou sudo ldconfig.



No arquivo de texto /etc/ld.so.conf só tem uma linha com "include /etc/ld.so.conf.d/*.conf". Era para estar escrito algo mais?

Já na pasta /etc/ld.so.conf.d existe um arquivo chamado aruco.conf e aruco.conf~ que, inclusive, no tutorial que segui, dizia que era para eu escrever /usr/local/lib dentro de aruco.conf.


Conversei com um amigo meu, e ele disse que suspeita que o ArUco não foi instalado "globalmente" no meu sistema. Eu havia instalado o ArUco de acordo como dizia para instalá-lo no tutorial (>cmake .. >make..>make install), e toda aquela configuração /etc/ld.so.conf... (http://miloq.blogspot.com.es/2012/12/install-aruco-ubuntu-linux.html)




9. Re: Gerar executável de programa c++ que utiliza bibliotecas externas

Perfil removido
removido

(usa Nenhuma)

Enviado em 07/04/2013 - 20:40h

Seu texto diz Aruco e OpenCV. Então o arquivo opencv.pc (é esse o nome?) também faz parte da coisa toda.
Eu estranhei o fato de ter

Se o ldconfig leu os arquivos corretamente, então deve aparecer esses bibliotecas na saída do ldconfig.

ldconfig -p | less  


Essa é a saída das bibliotecas do cache. Se está no cache, então foram encontradas pelos caminhos descritos em /etc/ld.so.conf e /etc/ld.so.conf.d após executar sudo ldconfig após a instalação.

Inclusive em /etc/ld.so.conf deve ter algum tipo de include para os configs de /etc/ld.so.conf.d/


10. Re: Gerar executável de programa c++ que utiliza bibliotecas externas

Weverton de Araújo Apolinário
TonJuan

(usa Ubuntu)

Enviado em 08/04/2013 - 10:53h

Já entendi como se faz e onde eu estava errando. Para compilar os *.cpp e criar outros executáveis, além daqueles que já vêm quando a biblioteca é instalada, basta utilizar o cmake no CMakeLists.txt da pasta principal, que ele já faz tudo sozinho (não preciso ir no terminal escrever g++ NomeDoExecutável ... para criar um novo executável).

Para quem estiver futuramente usando essa biblioteca e esteja tão perdido quanto eu estava, para criar novos executáveis provenientes de um código *.cpp novo, basta incluir esse novo *.cpp no CMakeLists.txt da pasta aruco/utils, da mesma forma como os outros programas estão inclusos, e depois utilizar cmake no CMakeLists da página principal.

De qualquer forma, obrigado pelo apoio Listeiro 037 e rei_astro.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts