Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Классы в статических библиотеках.

279
26 июля 2006 года
bave
456 / / 07.03.2004
Мне нужно класс запихнуть в статическую библиотеку (не оюъект класса, а сам класс).
--------------------------------------------------------
Для примера (только ПРИМЕРНО, как я пытаюсь это сделать):

В стат. библиотеке:
//.hpp
class test
{
public:
int test_mthd();
};
//.cpp
#iclude "tetslib.hpp"
int test:: test_mthd() { return 2; }
дальше получаю - testlib.lib
------------------------------------------------------------
В самой программе:

#pragma comment(lib, "testlib.lib")
#include "testlib.hpp"

test t;
int main()
{
t.some_mthd();
return 0;
}
------------------------------------------------------------
И в итоге облом - прогармма не видит методов класса:
unresolved external symbol "public: int __thiscall test::some_mthd()" (?some_mthd@test@@QAEPAEI@Z)
Debug/test.exe : fatal error LNK1120: 1 unresolved externals
---------------------------------------------------------
Пачему?
240
26 июля 2006 года
aks
2.5K / / 14.07.2006
1. А он видит библиотеку? тоесть она лежит в директориях прописанных для поиска библиотечных файлов?

2. И почему в классе метод называеться test_mthd(), а в программе some_mthd(). Он точно реализован? )
279
26 июля 2006 года
bave
456 / / 07.03.2004
1. Да видит - потому, что функции которые реализованы в библиотеке
не как методы класса, а как отдельные функции вызваются нормально.
2. Это я просто опечатку сделал - когда пост печптал, в исходнике всё нормально.
--------------------------------
Проблема в том, что программа думает, что класс в заголовочном файле
testlib.hpp - объявлен как новый класс, и не видит его реализации
внутри lib-файла (даже не пытается видеть).
------------------------------------
вот для функции мне приходится указывать класс памяти в .hpp программы - extern, чтоб линковщик ошибок не выдовал.
Т.е. вот так:
//в библиотеке:
//.hpp
int test_func();
//.cpp
#include "testlib.hpp"
int test_func() { return 2; }

//в программе:
//testlib.hpp:
extern int test_func();

//.cpp
#pragama comment(lib, "testlib.lib")
#include "testlib.hpp"

int main()
{
test_func();
return 0;
}
//Вот так всё чётко пашет...
---
Может и классы надо как-нибудь по особому обявлять???
------------------------------------------------------
У кого нибудь есть рабочий пример??
3
26 июля 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=bave]
Проблема в том, что программа думает, что класс в заголовочном файле
testlib.hpp - объявлен как новый класс, и не видит его реализации
внутри lib-файла (даже не пытается видеть).
[/QUOTE]
Это ошибочное предположение.
Что значит "новый класс"?
Есть такое понятие "единица компиляции". Грубо говоря это один с/cpp файл со всеми подключенными к нему заголовочными файлами (.h).
Так вот эти единицы компиляции никак друг с другом не связаны. Соединяет их линковщик, а ему все равно где какой это obj-файл, только что созданный из cpp или взятый из lib. Так что не имеет значения где находится реализация класса.

[QUOTE=bave]
вот для функции мне приходится указывать класс памяти в .hpp программы - extern, чтоб линковщик ошибок не выдовал.
Т.е. вот так:
//в библиотеке:
//.hpp
int test_func();
//.cpp
#include "testlib.hpp"
int test_func() { return 2; }

//в программе:
//testlib.hpp:
extern int test_func();

//.cpp
#pragama comment(lib, "testlib.lib")
#include "testlib.hpp"

int main()
{
test_func();
return 0;
}
//Вот так всё чётко пашет...
[/QUOTE]
В данном случае extern - совершенно лишнее.

[QUOTE=bave]
Может и классы надо как-нибудь по особому обявлять???
[/QUOTE]
Нет

[QUOTE=bave]
У кого нибудь есть рабочий пример??[/QUOTE]
Твой первый пример (если исправить опечатку с именами методов) вполне рабочий (проверенно)
Ищи ошибку в чем-то другом. Может, не находиться твоя lib...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог