Я всегда использовал XCode для компиляции кода на основе OpenCV в C ++. Процедура в Xcode была довольно простой, мне просто нужно было указать пути и добавить необходимые файлы lib в проект. Theres это приложение называется CodeRunner 2 для macOS. Там нет надлежащей документации о том, как включить внешние библиотеки для компиляции кода в этом приложении. Можно ли связать заголовки OpenCV и скомпилировать их в CodeRunner? Если да, может кто-нибудь опубликовать шаги?
Вы можете запустить OpenCV в CodeRunner, установив новый язык. Перейдите в «Настройки» -> «Языки», щелкните правой кнопкой мыши C ++ и выберите «Дублировать». Назовите новый язык «C ++ OpenCV». В правой части окна настроек нажмите «Настройки», затем кнопку «Редактировать сценарий». Посмотрите на эту строку (или что-то подобное):
xcrun clang++ -x c++ -lc++ -o "$out" "${files[@]}" "${@:1}"
Добавьте параметры командной строки clang ++ для OpenCV после "$out"
, Вот моя версия:
xcrun clang++ -x c++ -lc++ -o "$out" -I/usr/local/opt/opencv3/include -L/usr/local/opt/opencv3/lib -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_imgcodecs -lopencv_videoio -lopencv_calib3d "${files[@]}" "${@:1}"
Изменить -I
а также —L
параметры, соответствующие вашему пути установки OpenCV. На этой машине я использовал Homebrew для установки OpenCV, поэтому он был установлен в / usr / local / opt. На других машинах я скомпилировал из исходного кода, поэтому OpenCV установлен в / usr / local / lib.
Изменить -l
параметры для включения библиотек, которые вы обычно используете.
После сохранения сценария компиляции вернитесь в «Настройки» -> «Языки» и нажмите кнопку «Шаблоны». Вы можете настроить шаблон для программ OpenCV. Вот мой:
#include <iostream>
#include "opencv2/core.hpp"#include "opencv2/imgproc.hpp"#include "opencv2/highgui.hpp"
using namespace std;
int main(int argc, char *argv[]) {
cv::Mat image;
// read an image
if (argc < 2)
image = cv::imread("img.jpg");
else
image = cv::imread(argv[1]);
if (!image.data) {
std::cout << "Image file not found\n";
return 1;
}
// create image window named "asdfasdf"cv::namedWindow("asdfasdf");
// show the image on window
cv::imshow("asdfasdf", image);
// wait for key
cv::waitKey(0);
return 0;
}
Предыдущий ответ от SSteve хорош, а также помогает мне разобраться со ссылками Увеличение библиотека в CodeRunner.
Поскольку решение в предыдущем ответе относится к OpenCV библиотека, небрежное добавление в командную строку clang ++ для внешних библиотек в целом может привести к огромным ошибкам при сборке, что было в случае, когда я пытался связать Увеличение библиотека.
Здесь я хочу уточнить неясный момент в ответе SSteve, чтобы все знали, как и где изменить командную строку, прежде чем компилировать свой код с внешней библиотекой в системе Mac OS.
Я буду использовать свой случай для объяснения, но в какой-то момент я сообщу вам о хитрых битах в настройках CodeRunner или типизированной командной строке.
я использую macport
установить Увеличение библиотека по
sudo port install boost
/opt/local/include
/opt/local/lib/
Если вы не можете найти конкретную подбиблиотеку в Увеличение, откройте свой терминал и введите
cd /opt/local/lib/
find . -iname "*boost*"
и вы должны увидеть все под-библиотеки Увеличение (статическая библиотека заканчивается .a
и динамическая библиотека заканчивается .dylib
) как показано ниже.
Перед тем, как вы начнете изменять исходную командную строку (с поддержкой версии C ++ 14), такую как
xcrun clang++ -x c++ -std=c++14 -stdlib=libc++ -lc++ -o "$out" "${files[@]}" "${@:1}" ${CR_DEBUGGING:+-g}
Вы должны знать, что каталог заголовочного файла после -I
и каталог Увеличение библиотека после -L
, лайк
-I /opt/local/include/
-L /opt/local/lib/
Чтобы использовать скомпилированную статическую или динамическую подбиблиотеку в Увеличение (см. рисунок выше), вы должны включить его конкретно после -L /opt/local/lib/
, Однако, просто скопировав имя библиотеки без расширения файла либо .a
или же .dylib
никогда бы не позволил CodeRunner найти библиотеку, которую вы ожидаете запустить !!!
Подробно объясняется Вот и я просто цитирую важный бит ниже
clang -dynamiclib -o libtest.dylib file1.o file2.o -L/some/library/path -lname_of_library_without_lib_prefix
Чтобы запустить такой пример кода в Увеличение Быстрый старт Документ
#include <boost/regex.hpp>
#include <iostream>
#include <string>
int main()
{
std::string line;
boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );
while (std::cin)
{
std::getline(std::cin, line);
boost::smatch matches;
if (boost::regex_match(line, matches, pat))
std::cout << matches[2] << std::endl;
}
}
способ включить <boost/regex.hpp>
сейчас мимо
xcrun clang++ -x c++ -std=c++14 -stdlib=libc++ -lc++ -o "$out" -I /opt/local/include/ -L /opt/local/lib -lboost_regex-mt "${files[@]}" "${@:1}" ${CR_DEBUGGING:+-g}
Используя эту командную строку, вы сможете скомпилировать пример кода с Увеличение библиотека.
Просто не забудьте заменить префикс
-lib
с-l
и исключить расширение файла в командной строке.
Наконец, есть несколько альтернативных решений для включения внешней библиотеки с помощью Xcode, который находится в Вот