Подтвердить что ты не робот

Включение исходных файлов из другого проекта С++ в Eclipse CDT

У меня есть проект С++ в Eclipse CDT, который использует некоторые функции из OpevCV, и он компилируется в исполняемый файл и отлично работает. Теперь я хочу иметь новый проект на С++, который использует некоторые функции, определенные в первом. Я не могу заставить их скомпилировать и связать вместе.

У меня есть #include "..." в соответствующих файлах в новом проекте, я добавил старый проект к ссылкам проектов нового проекта и в настройках сборки нового проекта, я добавил исходную папку старый проект в качестве опции include (-I gcc).

Я приложил скриншот моего Eclipse в случае, если он будет полезен:

enter image description here

Ошибка компилятора:

Цель проекта: OtherProject
Вызов: GCC С++ Linker
g++ -o "OtherProject". /src/foo.o
./src/foo.o: В функции `main ':
/home/max/opencvjni/OtherProject/Debug/../src/foo.cpp:13: undefined ссылка на порог() '
collect2: ld вернулся 1 статус выхода
make: *** [OtherProject] Ошибка 1

Вот код в этих других файлах на других вкладках скриншота:

Threshold.cpp

#include <cv.h>
#include <highgui.h>
#include "Threshold.h"

using namespace cv;

int threshold(void) {
   Mat img = imread("/home/max/opencvjni/monalisa.jpg", 0);
   threshold(img, img, 127, 255, THRESH_BINARY);
   imwrite("/home/max/opencvjni/monathresh.jpg", img);
   return 0;
}

int main(void) {
  threshold();
  return 0;
}

Threshold.h

#ifndef THRESHOLD_H_
#define THRESHOLD_H_

int threshold(void);

#endif /* THRESHOLD_H_ */[/code]
  • Версия Eclipse: 3.7.2
  • Версия CDT: 8.0.2.201202111925
  • ОС: Ubuntu 12.04

Спасибо, что посмотрели мой пост, если нет способа сделать это, или просто разумнее сделать это по-другому, пожалуйста, не стесняйтесь говорить об этом.

Привет

4b9b3361

Ответ 1

Я тоже искал ответ, но предыдущие ответы не решили проблему. (Ответ Ник был полезен). Вы должны определить 2 вещи:

  • Перейдите к Project->Properties->C/C++ general->Paths and Symbols. Выберите вкладку Source Location и нажмите Link Folder..., затем выберите папку, которую вы хотите включить.
  • Перейдите к Project->Properties->C/C++ general->Paths and Symbols. Выберите вкладку Includes. Убедитесь, что вы выбрали правильный язык в меню слева (например: GNU C++) и нажмите Add..., затем выберите папку, которую вы хотите включить.

Примечание: Я не уверен, что это необходимо, но когда я создал внешний проект, я выбрал опцию "Общая библиотека" в новом мастере проекта.

Чтобы убедиться, что вы все сделали нормально, перейдите к: Project->Properties->C/C++ Build->Settings. Выберите GCC C++ Linker и убедитесь, что All options содержит "-L/your_folder_name". Повторите это также для GCC C++ Compiler.

Ответ 2

Перейдите в Project- > Properties- > C/С++ general- > Paths and Symbols. Выберите вкладку "Расположение источника" и нажмите кнопку "Ссылка на папку...". Вы должны иметь возможность выбрать каталог, содержащий проект, который вы хотите ссылаться. Все исходные файлы для этого проекта будут включены в ваш текущий проект. Все равно работает для меня.

Ответ 3

Как новый пользователь я не мог комментировать ответ Itay Gal, так что это действительно хитрый способ добавить к этому ответу. Мои дополнения могут констатировать очевидное, но это было не так уж очевидно для меня.

От Итай Гал Вы должны определить 2 вещи:

из ссылающегося проекта

1. Перейдите в Project-> Свойства-> C/C++ general-> Пути и символы. Выберите вкладку "Местоположение источника" и нажмите "Папка ссылок", затем выберите папку, которую хотите включить.

Чтобы "выбрать папку, которую вы хотите включить", я использовал ссылку Folder-> "Дополнительно", установил флажок "Ссылка на папку в файловой системе" и перешел к папке, в которой находится мое рабочее пространство. "Имя папки" - это подкаталог моего ссылающегося проекта, в котором будут отображаться мои файлы, на которые есть ссылки, и они автоматически заполнялись при выборе папки, на которую есть ссылки. Вы можете редактировать имя папки, но не можете указать путь к ней, чтобы сделать ее подкаталогом.

2. Перейдите в Project-> Свойства-> C/C++ general-> Пути и символы. Выберите вкладку "Включает". Убедитесь, что вы выбрали правильный язык в левом меню (например, GNU C++) и нажмите Add..., затем выберите папку, которую вы хотите включить.

Развернув пункт "выберите папку, которую вы хотите включить", на вкладке "включает" я щелкнул Add-> Рабочая область, выбрал проект, на который ссылаются, и просмотрел папку, на которую ссылался, и нажал OK.

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

Чтобы убедиться, что вы все сделали правильно, перейдите: Project-> Свойства-> C/C++ Сборка-> Настройки. Выберите компоновщик GCC C++ и убедитесь, что параметры All содержат "-L/your_folder_name". Повторите это также для компилятора GCC C++.

Я нашел свой связанный проект в Project-> Properties-> C/C++ Build → Settings-> Cross ARM C++ Compiler в окне "все опции", но не в -> Cross ARM C++ Окно компоновщика "все параметры". Мой код выглядит правильно и все равно запускает окно отладки.

Большое спасибо Итай Гал за ответ.

Так что это отлично сработало для моего первого проекта, как сообщалось выше. Затем я попытался сделать то же самое с двумя другими проектами, которые должны были использовать ссылочный код. Потратив немало времени, я пришел к выводу, что в каталоге "Источники" проекты включаются не так, как в общем проекте. Если вы выберете проект и примените шаг 2, вы получите другой результат, чем если вы выберете каталог "Исходный код" и примените шаг 2. Это может быть то, что мне удалось непреднамеренно включить, барахтаясь при изучении затмения, но если это я смотри некуда его выключить.

Ответ 4

Мне лично нравится CMake, чтобы указать мои варианты сборки. Проекты CMake также могут быть импортированы в Eclipse CDT. CMake позволяет создавать проекты файлов файлов на linux, а также проекты VS в окнах. Веб-сайт OpenCV также предоставляет пример о том, как использовать его с CMake.