Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для MAnton
25 / 25 / 5
Регистрация: 21.04.2011
Сообщений: 141

Использование статических библиотек

07.09.2013, 20:15. Показов 2431. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть библиотека libcRand.a в которой определен класс cRand. Как мне теперь его использовать?
В Makefile я пишу

$(program_name): $(object_files)
g++ $^ -o $@ -L./src -lcRand $(link_flags) -pipe

Но при использовании класса из библиотеки вылезает ошибка о том что нет декларации cRand.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.09.2013, 20:15
Ответы с готовыми решениями:

Вопрос по теории касаемо статических библиотек *.a
Читаю исходники weechat (кто не в курсе - irc клиент). Там я заметил интересную особенность. Ну кроме того,организация программы немного...

Использование динамических библиотек .SO
Подскажите пожалуйста как правильно использовать библиотеки .so , нюанс в том что они являются "Клиентские библиотеки ...

Отличие статических библиотек и header файлов
Здравствуйте. Интересно какая, по большому счету, разница между использованием статической библиотеки *.a и header-файлов *.h и в каких...

7
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
08.09.2013, 21:58
Вами описанные действия в общем случае должны дать правильный результат.
Укажите конкретную ошибку. Возможно вы не описали класс перед его использованием.
0
 Аватар для MAnton
25 / 25 / 5
Регистрация: 21.04.2011
Сообщений: 141
09.09.2013, 15:59  [ТС]
Расскажу поподробней: есть класс cRand определенный в файле cRand.cpp и описанный в cRand.h
В Makefile пишу следующее:

program_name := prog
source_dirs := .
link_flags :=
source_dirs := $(addprefix ../src/, $(source_dirs))
source_files := $(wildcard $(addsuffix /*.cpp, $(source_dirs)))
object_files := $(notdir $(source_files))
object_files := $(object_files:.cpp=.o)
VPATH := $(source_dirs)
libcRand.a: $(object_files)
ar rc $@ $^
ranlib $@
%.o: %.cpp
g++ -c -g $^

В результате получаю файл libcRand.a, потом копирую его в другой проект в директорию с исходниками. Для этого проекта свой Makefile, строку компиляции написал в первом сообщении. Теперь чтобы использовать класс cRand мне больше ничего не надо? Через include мне ничего не надо подключать?
В main я пишу просто
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <complex>
#include <valarray>
#include <math.h>
#include <iostream>
using namespace std;
 
#include "fft.h"
 
int main(){
  cRand r;
   return 0;
}
и получаю ошибку:
../src/./main.cpp: В функции «int main()»:
../src/./main.cpp:10:3: ошибка: нет декларации «cRand» в этой области видимости
../src/./main.cpp:10:9: ошибка: expected «;» before «r»
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
09.09.2013, 17:12
Цитата Сообщение от MAnton Посмотреть сообщение
Через include мне ничего не надо подключать?
таки надо инклудить cRand.h, т.к. похоже в fft.h он не подключаться.
2
 Аватар для MAnton
25 / 25 / 5
Регистрация: 21.04.2011
Сообщений: 141
09.09.2013, 18:18  [ТС]
Все равно не выходит, говорит нет такого файла или каталога
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
09.09.2013, 19:06
Все равно не выходит, говорит нет такого файла или каталога
Телепатия подсказывет, что Вы имеете в виду файл cRand.h?
Может быть, его действительно нет там, где его ищет компилятор.
Переместите его в нужное место или ккажите компилятору (ключ -I), где его искать.
0
 Аватар для MAnton
25 / 25 / 5
Регистрация: 21.04.2011
Сообщений: 141
09.09.2013, 19:55  [ТС]
У меня вообще нет файла cRand.h, есть только библиотека libcRand.a в которой объектный файл cRand.o.

Добавлено через 22 минуты
Добавил файл cRand.h и заработало, но тогда вопрос зачем нужны статические библиотеки если приходится таскать заголовочные файлы?
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
09.09.2013, 20:56
но тогда вопрос зачем нужны статические библиотеки если приходится таскать заголовочные файлы?
Заголовочные файлы обычно используются для описания используемых классов, типов, констант и т.д.
Никакого отношения к статической или динамической линковке они не имеют.
Библиотеки, как статические, так и динамические, решают задачу использования кода без полной пересборки проекта из исходников.
В случае закрытых библиотек - это, к тому же, единственная возможность использовать чужой код (или прилинковать к своему проекту бэкдор :-).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.09.2013, 20:56
Помогаю со студенческими работами здесь

Подключение сторонних статических библиотек
Всем привет! У меня есть библиотека по базам, не суть, надо ее подключить в Визуал Студио. Посмотрел видосы, где сначала что-то...

Подключение статических библиотек в Creator
Всем доброго времени суток. Возникла необходимость подключения статических библиотек в Creator(в Windows). Но как я не крутил в файле...

Скрытие warning сторонних статических библиотек в g++
Здравствуйте! Я статически подключаю библиотеку (liblibrary.a), и тут компилятор gnu g++ выдает мне предупреждение на одно из мест в...

Подключение скомпилированных статических библиотек с++ VS15
Решил поиграться с ncurses. До этого лишь раз пользовал её на Uvuntu. Сейчас сижу в винде. Скомпилировал PDcurses через MinGW, получил на...

Быстродействие программы при использовании статических и динамических библиотек
Всем привет! Понимаю, что вопрос простой... но не могу, не получить экспертного мнения. Правильно ли я понимаю, что программы, которые...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru