435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
1

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

06.11.2014, 08:07. Показов 2300. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2014, 08:07
Ответы с готовыми решениями:

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

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

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

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

14
236 / 195 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
06.11.2014, 08:23 2
Цитата Сообщение от gumi250 Посмотреть сообщение
Как скомпилить проект не подключая напрямую файл С:\2\a3.h ?
Нужно сохранить его в репозитории. В этом случае, где бы он ни находился, он будет виден в любом проекте.
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
06.11.2014, 09:02  [ТС] 3
Цитата Сообщение от SmittWesson Посмотреть сообщение
Нужно сохранить его в репозитории.
Что это и где находится этот репозиторий?
0
236 / 195 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
06.11.2014, 09:11 4
Цитата Сообщение от gumi250 Посмотреть сообщение
Что это и где находится этот репозиторий?
Repository - хранилище (склад).
В Гугле можно поискать по запросу - Repository C++ Builder
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
06.11.2014, 13:38  [ТС] 5
На сколько я понял этот репозитарий для хранения часто используемых форм. Мне же нужно только *.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
31246 / 20425 / 7961
Регистрация: 22.10.2011
Сообщений: 35,465
Записей в блоге: 6
06.11.2014, 14:19 6
gumi250, откомпилируй свой cpp-файл, получи OBJ, сохрани его в свою папку, путь к ней добавь в Library path, и в проектах просто:
C++
1
2
3
#include "myfile.h"
 
#pragma link "myfile.obj"
Include path ищет только h-файлы в заданной папке, но не cpp...
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
06.11.2014, 14:46  [ТС] 7
UI, тоже вариант. Но я довольно часто лажу в свои библиотечные cpp-файлы, правлю, добавляю и т.д. Делать после этого каждый раз obj-файл не очень то и удобно. Да и точки остановки в obj-файл не поставишь.
У меня основная масса это шаблонные классы и реализованы они в h-файлах и все сразу без проблем подключаются одним инклудом и добавлением в проект всего одного файла в котором перечислены все мои h-файлы с шаблонами. Раньше я и обычные не шаблонные функции реализовывал в h-файлах и все было здорово. Но вот новый 64битный компилятор отказался это понимать, и пришлось писать как положено cpp-файлы.
И вот эти несколько сpp-файлов постоянно приходится ручками в проект добавлять. Это меня утомляет, думал есть проще путь. Но я так понимаю, что нет.
0
236 / 195 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
06.11.2014, 16:30 8
Я помню, что как-то делал. В общем делаем так.
В папку include, помещаем свой каталог MyClass и скидываем туда все cpp и h файлы.
Открываем Project\Options\directories\Conditionals
Жмём на кнопочку с троеточием напротив Include patch и прописываем в неё путь к каталогу MyClass.
Всё. Работаем.
0
Эксперт С++
8289 / 6120 / 613
Регистрация: 10.12.2010
Сообщений: 28,612
Записей в блоге: 30
06.11.2014, 16:36 9
Странные у вас однако проблемы, скопировать исходники в папку с проектом и подключить.
Цитата Сообщение от gumi250 Посмотреть сообщение
На сколько я понял этот репозитарий для хранения часто используемых форм.
Форм, классов, компонент и шаблонов проектов и пр.

Но я этим не пользуюсь ибо легче скопипастить исходники и положить рядом с проектом не желе каждый раз думать при переносе проекта что и как тянет данный проект и какие пути прописать.
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
06.11.2014, 17:21  [ТС] 10
Цитата Сообщение от SmittWesson Посмотреть сообщение
Жмём на кнопочку с троеточием напротив Include patch и прописываем в неё путь к каталогу MyClass.Всё. Работаем.
Я тоже полагал, что так должно работать. Я первым делом прописал туда свой путь C:\2\ и проблемы это не решило.
Цитата Сообщение от Avazart Посмотреть сообщение
Странные у вас однако проблемы, скопировать исходники в папку с проектом и подключить.
Да это не проблемы. Просто я думал, что может чего недопонимаю, что можно попроще, прописать путь один раз и все, ан нет.
Иметь одну папку с библиотеками на все проекты или копировать в каждый проект свою копию, это разные подходы, тут каждый сам решает что ему удобней.
0
Эксперт С++
8289 / 6120 / 613
Регистрация: 10.12.2010
Сообщений: 28,612
Записей в блоге: 30
06.11.2014, 17:39 11
Цитата Сообщение от gumi250 Посмотреть сообщение
Я тоже полагал, что так должно работать.
Не должно, по любому нужно добавлять сpp файлы в проект или линковать с уже собранными *.lib / *.obj
0
236 / 195 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
06.11.2014, 17:47 12
Цитата Сообщение от gumi250 Посмотреть сообщение
Я первым делом прописал туда свой путь C:\2\ и проблемы это не решило.
Не так нужно прописывать, а вот так - $(BCB)\include\MyClass.
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
06.11.2014, 18:10  [ТС] 13
Цитата Сообщение от SmittWesson Посмотреть сообщение
Не так нужно прописывать, а вот так - $(BCB)\include\MyClass.
Не вижу особой разницы. Но все равно сделал как вы написали и не помогло.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31246 / 20425 / 7961
Регистрация: 22.10.2011
Сообщений: 35,465
Записей в блоге: 6
06.11.2014, 19:07 14
Цитата Сообщение от SmittWesson Посмотреть сообщение
Жмём на кнопочку с троеточием напротив Include patch и прописываем в неё путь к каталогу MyClass
Это Билдер, а не Дельфи, в котором можно указать путь к папке с исходником в "Search path", и он будет компилироваться в текущую папку проекта. Билдер такого не позволяет...
0
krv
07.11.2014, 10:48     Подключение библиотечных файлов
  #15

Не по теме:

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

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2014, 10:48

Помощь в написании контрольных, курсовых и дипломных работ здесь.

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

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

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

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

Подключение файлов
Здравствуйте, помогите разобраться у меня стоит локальный сервер denwer,есть папка site, в ней...

Подключение файлов .js
Ребята помогите пожалуйста стаким вопросом: Суть проблемы. есть 2 файла HTML и 2 файла .js Из...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.