Вопрос Проблемы с псевдонимами и opencv


У меня есть псевдоним, определенный для компиляции программы opencv, которая идет следующим образом

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

Затем я перехожу к типу

gcv imageshow.cpp

Я получаю этот длинный список ошибок

enter image description here

Но когда я использую ту же команду, указанную в псевдониме с файлом .cpp (исходный код) между файлами Include и Library (следуя предложению здесь), все работает как шарм.

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

Теперь, набрав длинную команду, которая становится еще больше по мере увеличения сложности, каждый раз становится трудным, пожалуйста, помогите мне в том, чтобы заставить псевдоним работать или предложить любую другую альтернативу.


1
2017-07-30 17:43


происхождения


пытаться g++ imageshow.cpp (pkg-config --cflags --libs opencv) также попробуйте добавить пробел в конце строки псевдонима. - user827992
Не повезло ни с ... Я получаю ошибки .. g ++: error: pkg-config -libs opencv: Нет такого файла или каталога. - Bhargav
Пространство после псевдонима не имеет значения. - Bhargav
просто попробуйте попробовать pkg-config --cflags --libs opencv но вам не хватает необходимых пакетов для разработки с помощью opencv, установите эти пакеты с помощью sudo apt-get install libopencv-dev и после этого sudo ldconfig - user827992
Каждый другой пакет присутствует. Я получаю длинный список при выполнении команды. - Bhargav


ответы:


Попробуйте это, не используя псевдонимы:

g++ imageshow.cpp -o imageshow `pkg-config --cflags --libs opencv` 

3
2017-07-30 18:26



О, дерьмо ... все это, в то время как в любом другом месте я видел эту команду, я думал, что это была «одинарная цитата». Когда я снова увидел, что я снова подчеркиваю одно и то же. Я скопировал и вставил ее, снял время и понял, что это была «Тильда». Спасибо ТОН: D - Bhargav
если вы смущены этим, вы всегда можете использовать эквивалентную версию, которая g++ imageshow.cpp -o imageshow $(pkg-config --cflags --libs opencv) - user827992
Я бы сказал, изменим обратные $(...) в ответ. mywiki.wooledge.org/BashFAQ/082 - geirha


Почему бы не использовать простой скрипт вместо псевдонима?

файл gcv в ~/bin/

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

Альтернативно, если вы используете zsh вы можете использовать функцию, определенную в вашем .zshrc файл:

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

Автоматизированные флаги компилятора и компоновщика

Если у вас возникли проблемы с компоновщиками, вы также можете включить pkg-config Вот:

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

Пробелы в именах файлов

В то время как другие должности по аналогичным вопросам существовать, обработка пробелов в именах файлов не тривиально, поэтому я подумал, что напомню здесь изящное решение; я нашел что использование IFS переменная очень помогает.

Поэтому, сделав небольшое дополнение,

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

решает проблемы с пробелами в именах файлов тоже!


0
2017-07-30 18:14



Я даю ему выстрел прямо сейчас. Мне нужна ясность в этом .. Это сценарий оболочки? Я называю его gcv.sh и помещаю его в ~ / bin ?? Я использую оболочку по умолчанию, чтобы ее Bash правильно? - Bhargav
@Bhargav - Да, это скрипт оболочки. Вы должны сделать его исполняемым, используя chmod +x gcv (Удалите .sh, если вы хотите использовать только gcv!). И да положите его в свой ~/bin каталог, который .bashrc должны уже прилагаться к $PATH, - jmetz
Теперь .. последнее, что ты сказал о $ PATH .. Кажется, я не нашел его в моем файле .bashrc. Что мне делать? - Bhargav
Вы можете добавить его сами; в конце вашего ~/.bashrc добавить файл export PATH=$PATH:~/bin - это означает, что любые исполняемые сценарии в вашей папке bin будут доступны для вызова без указания полного пути - jmetz
Проблема: если у меня есть сценарий в той же папке, что и исходный код, он отлично работает, а не нет. ERROR: bash: ./gcv: Нет такого файла или каталога. - Bhargav


Сообщение о создании сценария оболочки было не очень понятно. Это была простая процедура, которую я выполнил, чтобы создать собственный скрипт, и он работает, даже если в нем есть пробелы.

Вот что я сделал

  • mkdir ~/bin
  • nano ~/bin/gcv
  • sudo chmod u+x ~/bin/gcv
  • Введите в скрипт следующее

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

  • Тип echo $PATH и убедитесь, что вы видите ~/bin перечисленные в выводе u get.
  • Тип alais если вы видите какие-либо псевдонимы по имени gcv используйте команду unalias gcv или у вас будут проблемы с использованием gcv как команда для компиляции кода, возможно, псевдонимы имеют более высокий приоритет, чем скрипты.
  • Даже если мои имена файлов имеют пробелы в них, сценарий не будет иметь проблемы.

0
2017-08-08 16:08