Включать внешние библиотеки в приложение CodeRunner 2?

Я всегда использовал XCode для компиляции кода на основе OpenCV в C ++. Процедура в Xcode была довольно простой, мне просто нужно было указать пути и добавить необходимые файлы lib в проект. Theres это приложение называется CodeRunner 2 для macOS. Там нет надлежащей документации о том, как включить внешние библиотеки для компиляции кода в этом приложении. Можно ли связать заголовки OpenCV и скомпилировать их в CodeRunner? Если да, может кто-нибудь опубликовать шаги?

0

Решение

Вы можете запустить 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;
}
3

Другие решения

Предыдущий ответ от 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, который находится в Вот

1