Форум программистов, компьютерный форум, киберфорум
C/C++: IDE, инструментарий
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
2 / 2 / 1
Регистрация: 27.06.2012
Сообщений: 39

Раздельная компиляция в NetBeans: как избавится от ошибки типа "No such file or directory"?

24.10.2016, 16:33. Показов 2941. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Не могу реализовать простую вещь:
создаю проект - динамическая библиотека. В ней создаю 3 новых класса. В итоге у меня образуется 3 файла .h и три .cpp

Создаю новый проект "приложение на с++", в котором буду использовать объекты этих трех классов.
И тут, я так понял, есть два варианта:
1) Прицепить к проекту dll файл моей библиотеки и использовать его. Тут тоже есть два варианта:
а) прикрепить с библиотекой lib (у меня этот lib не компилируется, только сам dll)
б) прикрепить без библиотеки lib - код в два десятка строк с использованием всяких LoadLibrary("DLLTEST.DLL") и (cfunc)GetProcAddress((HMODULE)hLib, "NumberList") + как то специфично объявлять классы в самом библиотечном файле;
2) Вариант по проще, и как казалось ранее, самое то: в свойствах проекта - Компилятор С++ - включить каталоги: указываем путь к проекту моей библиотеки, заголовки include - опять же, указываем путь к проекту моей библиотеки. Затем в новом проекте я сверху прикрепляю необходимые файлы include "name.h" и все круто пишется, видятся все классы и все их методы, однако стоит начать сборку проекта, как компилятор выдает:
fatal error: \Путь к моей библиотеки\: No such file or directory, в другом проекте такое выкидывает:
undefined reference to на класс из моей библиотеки, который он отлично увидел в коде.

отсюда вопрос:
меня интересует любой самой простой способ как я могу использовать классы одного проекта (библиотеки) в других проектах?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.10.2016, 16:33
Ответы с готовыми решениями:

Первая раздельная компиляция. Подскажите ошибки.
golf.h #include <iostream> using std::cout; using std::cin; using std::endl; const int Len =40; const int Size =3;

NetBeans 8.2 ошибка при выполнении проекта: No such file or directory
Добрый день. Раньше был установлен NetBeans 8.1, все работало хорошо. Потом Windows переустановил, поставил NetBeans 8.2. И NetBeans...

Перевод строки в число типа longint (раздельная компиляция Turbo Pascal и TASM)
Составить внешнюю подпрограмму для варианта задания, соответствующего порядковому номеру студента в списке группы. Подпрограмму оформить в...

16
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.10.2016, 16:38
Зачем вообще dll? Есть три класса - подключи их через #include и пользуйся.
0
2 / 2 / 1
Регистрация: 27.06.2012
Сообщений: 39
24.10.2016, 16:45  [ТС]
так вот подключил, выдает No such file or directory
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
24.10.2016, 16:53
Цитата Сообщение от Nextor257 Посмотреть сообщение
undefined reference to на класс из моей библиотеки, который он отлично увидел в коде.
Это линкер выдаёт, не видит реализаций.
Цитата Сообщение от Nextor257 Посмотреть сообщение
однако стоит начать сборку проекта, как компилятор выдает:
fatal error: \Путь к моей библиотеки\: No such file or directory
Покажи, как путь прописан в свойствах проекта.
0
2 / 2 / 1
Регистрация: 27.06.2012
Сообщений: 39
24.10.2016, 17:37  [ТС]
Вот все настройки
Миниатюры
Раздельная компиляция в NetBeans: как избавится от ошибки типа "No such file or directory"?  
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
24.10.2016, 17:46
NetBeans - отдельная тема... Попробуй там include Headers убрать, только директории оставь.
0
2 / 2 / 1
Регистрация: 27.06.2012
Сообщений: 39
24.10.2016, 17:54  [ТС]
Теперь не нравится 18 строка кода - объявление класса:
C:\Users\Alexander\Documents\NetBeansPro jects\CppApplication_5/main.cpp:18: undefined reference to `LinarNetwork::LinarNetwork(int, std::vector<double, std::allocator<double> >&)'
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
24.10.2016, 17:56
Цитата Сообщение от Nextor257 Посмотреть сообщение
Теперь не нравится 18 строка кода - объявление класса:
Это уже линкер выдаёт (значит хедеры компилятор видит), не находит реализацию этого конструктора. Реализации у тебя в чём? В .dll?
1
2 / 2 / 1
Регистрация: 27.06.2012
Сообщений: 39
24.10.2016, 18:16  [ТС]
нет, cpp

Добавлено через 17 минут
Подцепил свою dll в свойствах проекта - Linker - Libraries и все заработало.
Значит нужно отдельно прописывать файлы на для Компилятора, и файлы для Компоновщика....
Спасибо.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
24.10.2016, 18:19
Цитата Сообщение от Nextor257 Посмотреть сообщение
Значит нужно отдельно прописывать файлы на для Компилятора, и файлы для Компоновщика....
Если .cpp и они добавлены в проект, то не нужно, а если .lib или dll, то нужно.
1
2 / 2 / 1
Регистрация: 27.06.2012
Сообщений: 39
24.10.2016, 18:45  [ТС]
попробовал и так, и так: когда я добавил dll, выдал ошибку undefined reference to на один из методов класса, все остальное он увидел. Когда я убрал dll, прописал include cpp, то ошибок не стало.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
24.10.2016, 18:58
Nextor257, тут трудно что-то определённое сказать (тем более для NetBeans, я эту среду не знаю), может когда собирал dll, то не было реализации этого метода, или ещё что-то.
Цитата Сообщение от Nextor257 Посмотреть сообщение
прописал include cpp
Где прописал?
0
2 / 2 / 1
Регистрация: 27.06.2012
Сообщений: 39
24.10.2016, 19:06  [ТС]
Когда была dll ругался на метод класса ToString (undefined reference to), хотя объекты данного класса создавал....
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template<typename T1>
class ConvertToString {
public:
    ConvertToString(T1 v1):value1(v1){};
    string ToString();
    virtual ~ConvertToString() {};
private:
    T1 value1;
};
template<typename T1>
string ConvertToString<T1>::ToString() 
{
   ostringstream outstr;
   outstr << value1;
   return outstr.str();
}
А прописал все вот так, финальный вариант:
Миниатюры
Раздельная компиляция в NetBeans: как избавится от ошибки типа "No such file or directory"?  
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
24.10.2016, 21:09
Цитата Сообщение от Nextor257 Посмотреть сообщение
А прописал все вот так
Делать инклуд .cpp - дурной тон.
Цитата Сообщение от Nextor257 Посмотреть сообщение
хотя объекты данного класса создавал....
Шаблоны (а об этом сразу нужно предупреждать) особый случай. В месте создания экземпляра шаблона, компилятор должен видеть реализацию шаблона, поэтому реализации шаблонов помещают в .h файл, вместе с объявлением, и подключают его в коде.
0
2 / 2 / 1
Регистрация: 27.06.2012
Сообщений: 39
25.10.2016, 12:22  [ТС]
Шаблоны (а об этом сразу нужно предупреждать) особый случай. В месте создания экземпляра шаблона, компилятор должен видеть реализацию шаблона, поэтому реализации шаблонов помещают в .h файл, вместе с объявлением, и подключают его в коде.
Поместил в реализацию .h файл, подцепил dll в линкере - все заработало.
Я не понял про первый вариант (если делать всё без dll), ты говоришь что:
Если .cpp и они добавлены в проект, то не нужно, а если .lib или dll, то нужно.
. Куда именно я должен добавить cpp чтоб всё заработало без dll? скопировать сами файлы и поместить их в проект?

Добавлено через 1 час 2 минуты
Цитата Сообщение от Nextor257 Посмотреть сообщение
Поместил в реализацию .h файл
Поместил реализацию в .h файл
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
25.10.2016, 14:47
Не собирается проект с шаблонным классом: "undefined reference"
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
25.10.2016, 14:59
Цитата Сообщение от Nextor257 Посмотреть сообщение
Куда именно я должен добавить cpp чтоб всё заработало без dll?
Если только шаблоны, то .cpp не нужны. Вот этого достаточно:
Цитата Сообщение от nd2 Посмотреть сообщение
реализации шаблонов помещают в .h файл, вместе с объявлением, и подключают его в коде.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.10.2016, 14:59
Помогаю со студенческими работами здесь

Ошибки на сайте (failed to open stream: No such file or directory и др)
На локалке все работает нормально... залил на хостинг в логах вылезают вот такие ошибки, сам сайт не загружается. помогите, пожалуйста,...

Раздельная компиляция и шаблоны: как правильно использовать?
Столкнулся с очень неприятной ситуацией, когда один и тот же код не работает, если класс разделить по файлам. #include...

Раздельная компиляция в Code::Blocks - как правильно разместить код в файлах?
В проекте code blocks есть функция main, несколько функций, которые подключаются как статические библиотеки, и структура (struct), которая...

Раздельная компиляция: как правильно реализовать многофайловый проект? (no matching function for call to...)
Есть основной файл main.cpp #include &quot;header.hpp&quot; int hp_summ_a=2000, hp_summ_b=2000; int const N=20; int main(){ ...

Раздельная компиляция: как быть, если код не компилируется, так как два файла подключают друг друга?
Доброго времени суток. У меня есть какой-нибудь x.h: #include &quot;y.h&quot; class A { vector&lt;B*&gt; v; } и y.h:


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru