Включение исходных файлов из другого проекта С++ в 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
Спасибо, что посмотрели мой пост, если нет способа сделать это, или просто разумнее сделать это по-другому, пожалуйста, не стесняйтесь говорить об этом.
Привет
Ответы
Ответ 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.