Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2012, 07:20   #1
KOPEIII
 
Регистрация: 05.04.2012
Сообщений: 4
Вопрос Создание своих библиотек

Хотел научиться создавать свои библиотеки.
допустим есть test.h и test.cpp:

test.h
Код:
int test(int);
test.cpp
Код:
int test(int n)
{return n;}
И допустим после этого пишем программу prog.cpp:
Код:
#include <iostream>
#include "test.h"
using namespace std;
main()
{
cout << test(5) << endl;
}
Я рассчитывал что это будет работать, но компилятор не видит определения функции тест. Компилятор g++ в Ubuntu. Откомпилировалось когда указал при компилировании файл test.cpp:
"g++ test.cpp prog.cpp -o "prog"" , но я добивался не этого, я добивался чтобы было достаточно директивы #include "test.h".

Если кто то знает как можно решить эту проблему, буду благодарен!
KOPEIII вне форума Ответить с цитированием
Старый 05.04.2012, 08:43   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
я добивался чтобы было достаточно директивы #include "test.h".
такого никогда не будет.
либы это в gcc/g++ lib<name>.a файлы, подключаються директивой компилятора.

а то что вы хотели вообще не реал, где компилятор должен реализацию по вашему искать?(он то не знает)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.04.2012, 15:22   #3
KOPEIII
 
Регистрация: 05.04.2012
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
такого никогда не будет.
либы это в gcc/g++ lib<name>.a файлы, подключаються директивой компилятора.

а то что вы хотели вообще не реал, где компилятор должен реализацию по вашему искать?(он то не знает)
Я понимаю что компьютеру файл в любом случае указывать, но хотелось добиться схожести со стандартными библиотеками когда мы включаем в файл директиву: "#include <string.h>" и никаких дополнительных файлов после этого не указываем компилятору с реализацией библиотеки.

Если это невозможно, не проще ли в таком случае в файл "test.h" писать не только объявления, но и определения? Но я читал что в заголовочные *.h файлы вписываются только определения.
KOPEIII вне форума Ответить с цитированием
Старый 05.04.2012, 15:39   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Я понимаю что компьютеру файл в любом случае указывать, но хотелось добиться схожести со стандартными библиотеками когда мы включаем в файл директиву: "#include <string.h>" и никаких дополнительных файлов после этого не указываем компилятору с реализацией библиотеки.
Все равно указываем, хоть и в неявном виде.
Например в моей студии в конфигурации указывается какую библиотеку при этом использовать. LIBC.LIB LIBCMT.LIB MSVCRT.LIB
То же касается #include <windows.h>
По умолчанию библиотеки kernel32.lib user32.lib gdi32.lib и прочие подключены в командной строке линкера. Но можно и отключить.
Поэтому создается илюзия, что достаточно написать нужный include.
И потом обычно спрашивают, почему ошибка типа unresolved external symbol.
EUGY вне форума Ответить с цитированием
Старый 05.04.2012, 15:43   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Но я читал что в заголовочные *.h файлы вписываются только определения.
вписать то можно что угодно, но принято что в хидерах только обьявления(исключения шаблонные вещи)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.04.2012, 01:26   #6
KOPEIII
 
Регистрация: 05.04.2012
Сообщений: 4
По умолчанию

Спасибо! EUGY разъяснил. Не подскажете как откомпилировать библиотеку в *.lib ? Прокатит "g++ test.cpp test.lib"?
KOPEIII вне форума Ответить с цитированием
Старый 06.04.2012, 01:56   #7
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Прокатит "g++ test.cpp test.lib
ктож его знает Проверь.
Я парень ленивый и просто напишу новый проект статической библиотеки, не выходя из студии. И уже забыл как выглядит командная строка.
PS.
У автора g++ в Ubuntu. там файловое расширение библиотек будет ".a", не ".lib"

Последний раз редактировалось EUGY; 06.04.2012 в 02:40.
EUGY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание библиотек. Файлы ".h". asmars Общие вопросы C/C++ 26 04.11.2011 13:25
Создание приложений с использованием созданных Библиотек DLL. Ann_Sh Помощь студентам 12 09.10.2011 15:13
Создание\использование своих DLL библиотек Vol666 Общие вопросы Delphi 5 26.08.2009 11:55
создание алгоритма сохранения своих данных при работе с программой street-walker Общие вопросы Delphi 1 04.05.2009 18:51
Создание библиотек паролей!!! Виталий Горбунов Общие вопросы C/C++ 5 22.03.2008 20:18