Problemas com aliases e opencv

1

Eu tenho um alias definido para compilar um programa operacional que é assim

alias gcv='g++ -I/usr/local/include/opencv -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_objdetect'

Então eu vou digitar

gcv imageshow.cpp

Eu recebo esta longa lista de erros

Mas quando eu uso o mesmo comando especificado no alias com o arquivo .cpp (código fonte) entre os arquivos Include e Library ( seguindo a sugestão aqui ), tudo funciona como um encanto.

g++ -I/usr/local/include/opencv imageshow.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui

Agora, digitando o comando longo, que fica ainda maior à medida que a complexidade aumenta, cada vez está ficando difícil, por favor, ajude-me a colocar o alias para funcionar ou sugira qualquer outra alternativa.

    
por Bhargav 30.07.2012 / 19:43

3 respostas

3

Experimente sem usar aliases:

g++ imageshow.cpp -o imageshow 'pkg-config --cflags --libs opencv' 
    
por user827992 30.07.2012 / 20:26
0

Por que não usar um script simples em vez do alias?

arquivo gcv em ~/bin/

#/bin/sh 
g++ $* -I/usr/local/include/opencv -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_objdetect

Como alternativa, se você estiver usando zsh , poderá usar uma função definida no seu arquivo .zshrc :

gcv() { 
    g++ $* -I/usr/local/include/opencv -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_objdetect;
} 

Sinalizadores automatizados de compilador e vinculador

Se você está com problemas de vinculação, também é possível incorporar pkg-config aqui:

#/bin/sh 
g++ $* 'pkg-config --cflags --libs opencv'

Espaços em nomes de arquivos

Enquanto outras postagens sobre problemas semelhantes existem , a manipulação de espaços nos nomes de arquivos é não trivial, então eu pensei em recapitular uma solução elegante aqui; especificamente eu encontrei que usar a variável IFS ajuda tremendamente.

Então, fazer uma pequena adição para acabar com

#/bin/sh 
IFS=$';'
g++ $* 'pkg-config --cflags --libs opencv'

resolve problemas com espaços em nomes de arquivos também!

    
por jmetz 30.07.2012 / 20:14
0

O post sobre a criação de um shell script não foi muito claro. Esse foi o procedimento simples que eu segui para criar um script e funciona mesmo que o nome do arquivo tenha espaços.

Veja o que eu fiz

  • mkdir ~/bin
  • nano ~/bin/gcv
  • sudo chmod u+x ~/bin/gcv
  • Digite o seguinte no script

        #!/bin/bash   
        g++ "$@" 'pkg-config --libs --cflags opencv'
    
  • export PATH=$PATH:~/bin

  • Digite echo $PATH e verifique se ~/bin está listado na saída.
  • Digite alais se vir aliases com o nome gcv use o comando unalias gcv ou senão você terá problemas ao usar gcv como um comando para compilar o código. Pode ser que aliases tenham prioridade mais alta que scripts.
  • Mesmo que os nomes dos meus arquivos contenham espaços, o script não terá um problema.
por Bhargav 08.08.2012 / 18:08