Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384

Подключение библиотечных файлов

06.11.2014, 08:07. Показов 3173. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть папка с *.cpp и *.h файлами в ней я храню мною написанные часто используемые ф-ции, но что то проблемы с их подключением. Приведу простой пример:
Пусть библиотечные файлы хранятся в папке С:\2\
Файлы:
Файл С:\2\a3.h
C++
1
2
3
4
#ifndef a3H
#define a3H
int f();
#endif
Файл С:\2\a3.cpp
C++
1
2
#include "a3.h"
int f() { return 1;}
Файл С:\2\a2.h
C++
1
2
3
4
#ifndef a2H
#define a2H
#include "a3.h"
#endif
Далее я создаю пустой проект, но сохраняю его в другую папку (С:\1\), добавляю к проету файл С:\2\a2.h и пытаюсь использовать функцию f() из файла С:\2\a3.h. Вот так:
Файл С:\1\Unit1.h
C++
1
2
3
4
5
#ifndef Unit1H
#define Unit1H
#include "a2.h"
#include <System.Classes.hpp>
...
Файл С:\1\Unit1.cpp
C++
1
2
3
4
5
...
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{  int a=f();  }
...
XE6 пишет ошибку [ilink32 Error] Error: Unresolved external 'f()' referenced from C:\1\WIN32\DEBUG\UNIT1.OBJ
Если подключить к проекту файл С:\2\a3.h, то ОК (но это меня это не устраивает).
Вроде в настройках попрописывал путь С:\2\, но безрезультатно (может не там прописал). Как скомпилить проект не подключая напрямую файл С:\2\a3.h ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.11.2014, 08:07
Ответы с готовыми решениями:

Как сообщить компилятору местонахождение загруженных библиотечных файлов?
если я в проекте задаю путь к файлу так #include &quot;zthread/ZThread.h&quot; то получаю сообщение об ошибке No such file or directory и...

Altium Designer - размер библиотечных файлов
Собственно решил переползти на что то серьезное. Выбор пал на Альтиум, как продолжение ПиКада.. Начал создавать библиотеки. Но...

Подключение заголовочных файлов и файлов реализации
Здравствуйте,при создании класса в visual studio руками не компилится проект,при создании через add class все работает,для примера написал...

14
 Аватар для SmittWesson
236 / 196 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
06.11.2014, 08:23
Цитата Сообщение от gumi250 Посмотреть сообщение
Как скомпилить проект не подключая напрямую файл С:\2\a3.h ?
Нужно сохранить его в репозитории. В этом случае, где бы он ни находился, он будет виден в любом проекте.
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
06.11.2014, 09:02  [ТС]
Цитата Сообщение от SmittWesson Посмотреть сообщение
Нужно сохранить его в репозитории.
Что это и где находится этот репозиторий?
0
 Аватар для SmittWesson
236 / 196 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
06.11.2014, 09:11
Цитата Сообщение от gumi250 Посмотреть сообщение
Что это и где находится этот репозиторий?
Repository - хранилище (склад).
В Гугле можно поискать по запросу - Repository C++ Builder
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
06.11.2014, 13:38  [ТС]
На сколько я понял этот репозитарий для хранения часто используемых форм. Мне же нужно только *.cpp и *.h файлы подключать. Тем не менее я добавил путь С:\2\ в Tools->Options->Environment Options->Directory->Shared repository , но увы это не помогло.
По идее достаточно было бы добавить путь С:\2\ в Project->Options-> Include path и все с моей точки зрения должно компилиться, но увы.
Самое странное для меня, это то что если я напишу реализацию ф-ции f() не в С:\2\a3.cpp , а в С:\2\a3.h , то опять все компилиться, но писать реализацию ф-ций в *.h файлах не правильно.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
06.11.2014, 14:19
gumi250, откомпилируй свой cpp-файл, получи OBJ, сохрани его в свою папку, путь к ней добавь в Library path, и в проектах просто:
C++
1
2
3
#include "myfile.h"
 
#pragma link "myfile.obj"
Include path ищет только h-файлы в заданной папке, но не cpp...
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
06.11.2014, 14:46  [ТС]
UI, тоже вариант. Но я довольно часто лажу в свои библиотечные cpp-файлы, правлю, добавляю и т.д. Делать после этого каждый раз obj-файл не очень то и удобно. Да и точки остановки в obj-файл не поставишь.
У меня основная масса это шаблонные классы и реализованы они в h-файлах и все сразу без проблем подключаются одним инклудом и добавлением в проект всего одного файла в котором перечислены все мои h-файлы с шаблонами. Раньше я и обычные не шаблонные функции реализовывал в h-файлах и все было здорово. Но вот новый 64битный компилятор отказался это понимать, и пришлось писать как положено cpp-файлы.
И вот эти несколько сpp-файлов постоянно приходится ручками в проект добавлять. Это меня утомляет, думал есть проще путь. Но я так понимаю, что нет.
0
 Аватар для SmittWesson
236 / 196 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
06.11.2014, 16:30
Я помню, что как-то делал. В общем делаем так.
В папку include, помещаем свой каталог MyClass и скидываем туда все cpp и h файлы.
Открываем Project\Options\directories\Conditionals
Жмём на кнопочку с троеточием напротив Include patch и прописываем в неё путь к каталогу MyClass.
Всё. Работаем.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.11.2014, 16:36
Странные у вас однако проблемы, скопировать исходники в папку с проектом и подключить.
Цитата Сообщение от gumi250 Посмотреть сообщение
На сколько я понял этот репозитарий для хранения часто используемых форм.
Форм, классов, компонент и шаблонов проектов и пр.

Но я этим не пользуюсь ибо легче скопипастить исходники и положить рядом с проектом не желе каждый раз думать при переносе проекта что и как тянет данный проект и какие пути прописать.
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
06.11.2014, 17:21  [ТС]
Цитата Сообщение от SmittWesson Посмотреть сообщение
Жмём на кнопочку с троеточием напротив Include patch и прописываем в неё путь к каталогу MyClass.Всё. Работаем.
Я тоже полагал, что так должно работать. Я первым делом прописал туда свой путь C:\2\ и проблемы это не решило.
Цитата Сообщение от Avazart Посмотреть сообщение
Странные у вас однако проблемы, скопировать исходники в папку с проектом и подключить.
Да это не проблемы. Просто я думал, что может чего недопонимаю, что можно попроще, прописать путь один раз и все, ан нет.
Иметь одну папку с библиотеками на все проекты или копировать в каждый проект свою копию, это разные подходы, тут каждый сам решает что ему удобней.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.11.2014, 17:39
Цитата Сообщение от gumi250 Посмотреть сообщение
Я тоже полагал, что так должно работать.
Не должно, по любому нужно добавлять сpp файлы в проект или линковать с уже собранными *.lib / *.obj
0
 Аватар для SmittWesson
236 / 196 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
06.11.2014, 17:47
Цитата Сообщение от gumi250 Посмотреть сообщение
Я первым делом прописал туда свой путь C:\2\ и проблемы это не решило.
Не так нужно прописывать, а вот так - $(BCB)\include\MyClass.
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
06.11.2014, 18:10  [ТС]
Цитата Сообщение от SmittWesson Посмотреть сообщение
Не так нужно прописывать, а вот так - $(BCB)\include\MyClass.
Не вижу особой разницы. Но все равно сделал как вы написали и не помогло.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
06.11.2014, 19:07
Цитата Сообщение от SmittWesson Посмотреть сообщение
Жмём на кнопочку с троеточием напротив Include patch и прописываем в неё путь к каталогу MyClass
Это Билдер, а не Дельфи, в котором можно указать путь к папке с исходником в "Search path", и он будет компилироваться в текущую папку проекта. Билдер такого не позволяет...
0
07.11.2014, 10:48

Не по теме:

Да, помню намучился при переходе с делфи на билдер с понятием "проект"...
подключение нужных файлов, правильное подключение хедеров....
Как же давно это было.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.11.2014, 10:48
Помогаю со студенческими работами здесь

подключение файлов
есть сайт, сделанный по шаблону. страницы разложены по каталогам. например: /index.php /contacts.php /contacts/inside.php ...

Подключение файлов
Как правильно соединить такие 3 файла: main_doc.cpp (файл с главной функцией, с которого все собственно и начинается) gamer.cpp(файл с...

подключение файлов
Столкнулся с такой проблемой: имеется вот такое дерево: index.php - data function.php - grg top.php

Подключение файлов
Здраствуйте! Проблема заключается в том, что при чтении файла формата .txt файл читает но вместо текста : Congratulations you did it ...

Подключение .c и .h файлов. Си
Собственно нужно подключить в .c файл .h файл. Создал .prj в котором прописал свои 2 файла. Что нужно делать дальше, чтобы это все...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru