скомпилировать библиотеку
От: Аноним  
Дата: 23.06.03 14:49
Оценка:
Красивый код, нечего сказать.
Только кто бы мне помог библиотеку скомпилировать?

Есть mylib.h:
class LibTest
{
  public:
    void hello();
};

Потом mylib.cpp:
#include <iostream.h>
#include "mylib.h"
void LibTest::hello()
{
  cout << "HELLO" << endl;
}


И наконец test.cpp:
#include <iostream.h>
#include "mylib.h"
int main()
{
  LibTest *p=new LibTest();
  p->hello();
  delete p;
  return 0;
}


Zapuskaju:
1) bcc32 -c mylib.cpp -> mylib.obj
2) tlib mylib +mylib -> mylib.lib
3) bcc32 test.cpp -> Cannot resolve external reference...
Vse files nahodjatsea v odnoi direktorii...



24.06.03 14:52: Ветка выделена из темы Как правильно освободить память &mdash; множественный вызов
Автор:
Дата: 23.06.03
— ПК
24.06.03 14:55: Перенесено модератором из 'C/C++' — ПК
Re[7]: скомпилировать библиотеку
От: Кодт Россия  
Дата: 23.06.03 15:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Красивый код, нечего сказать.

А>Только кто бы мне помог библиотеку скомпилировать?

Как это увязано с предыдущей проблемой?

А>Есть mylib.h:

А>
А>class LibTest
А>{
А>  public:
А>    void hello();
А>};
А>

А>Потом mylib.cpp:
А>
А>#include <iostream.h>
А>#include "mylib.h"
А>void LibTest::hello()
А>{
А>  cout << "HELLO" << endl;
А>}
А>

А LibTest у тебя экспортируемый?
Перекуём баги на фичи!
Re[8]: скомпилировать библиотеку
От: Аноним  
Дата: 23.06.03 15:58
Оценка:
Да я просто отчаялся получить помоши по етой проблеме...
А как зделати LibTest ехпортируемым?

Честное слово, целыи день серчил интернет, не нашел.
Re[9]: Как экспортировать-импортировать класс
От: Кодт Россия  
Дата: 23.06.03 17:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Да я просто отчаялся получить помоши по етой проблеме...

А>А как зделати LibTest ехпортируемым?

А>Честное слово, целыи день серчил интернет, не нашел.


В VC — проблем не возникло:
cl /c mylib.cpp                       -> mylib.obj
lib /out:mylib.lib mylib.obj          -> mylib.lib
cl test.cpp /link mylib.lib           -> test.obj, test.exe


А!!! Понял!!!
Ты же не указал при компиляции+линковке test.cpp, что нужно брать библиотеку mylib.lib

Как это делается в BCC — затрудняюсь сказать. Смотри руководства по компилятору и прочему.
Перекуём баги на фичи!
Re[10]: Как экспортировать-импортировать класс
От: Аноним  
Дата: 23.06.03 17:25
Оценка:
Да он (bcc32) вроде долjен сам брать из той же директории.
Заметил только чито в других lib-ах, если зделати листинг (tlib mylib, list.lst), модули имеют public classes. Моя mylib.lib при листинге толико следуюшии line:

public by module:
mylib size 8

i vsio...
Re[11]: Как экспортировать-импортировать класс
От: Кодт Россия  
Дата: 23.06.03 18:46
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Да он (bcc32) вроде долjен сам брать из той же директории.


Что-то я сомневаюсь...
Все-таки попробуй линкеру явно сказать, мол, вот тебе mylib.lib.

А>Заметил только чито в других lib-ах, если зделати листинг (tlib mylib, list.lst), модули имеют public classes.

Другие библиотеки — могут быть нарезаны на obj-файлы как угодно, например, по классам и даже по отдельным функциям.

А>Моя mylib.lib при листинге толико следуюшии line:


А>public by module:

А> mylib size 8

Правильно: mylib.lib должна mylib.obj.
Вот только — .obj ли она содержит (из 8 байт)?

Только хелп к борландовским bcc, tlib, tlink тебя спасет...
Перекуём баги на фичи!
Re[12]: Как экспортировать-импортировать класс
От: Аноним  
Дата: 24.06.03 08:42
Оценка:
Пробовал явно указать include и библиотеку — все равно не работает.

bcc32 -IPath_to_Include -LPath_To_Lib test.cpp

Хелп бесполезный.
Я в шоке — неужели такую простую веши нельзя нормально описать...

Vot oshibki:
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.cpp:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external 'LibTest::~LibTest()' referenced from C:\TEST\TEST.OBJ
Error: Unresolved external 'LibTest::LibTest()' referenced from C:\TEST\TEST.OBJ
Error: Unresolved external 'LibTest::hello()' referenced from C:\TEST\TEST.OBJ


tlib mylib, list.lst vidaet:

Publics by module

libtest size = 8
Re[13]: Как экспортировать-импортировать класс
От: Кодт Россия  
Дата: 24.06.03 09:05
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Пробовал явно указать include и библиотеку — все равно не работает.


А>bcc32 -IPath_to_Include -LPath_To_Lib test.cpp


А>Хелп бесполезный.

А>Я в шоке — неужели такую простую веши нельзя нормально описать...

А>Vot oshibki:

А>Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
А>test.cpp:
А>Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
А>Error: Unresolved external 'LibTest::~LibTest()' referenced from C:\TEST\TEST.OBJ
А>Error: Unresolved external 'LibTest::LibTest()' referenced from C:\TEST\TEST.OBJ
А>Error: Unresolved external 'LibTest::hello()' referenced from C:\TEST\TEST.OBJ

Это понятно: неправильно собралась и/или подцепилась библиотека.
Я по-прежнему сомневаюсь, что tlink будет искать в каталоге все мыслимые .lib-файлы. Скорее всего, он по умолчанию линкует только стандартный си-рантайм. Все сторонние библиотеки ему нужно указать поштучно.

Что касается сборки библиотеки.
1) Попробуй еще раз совершить обряд mylib.obj -> mylib.lib. Посмотри на все опции...
2) Попробуй вообще обойтись без библиотеки, линкуя .obj
bcc32 /c test.cpp
tlink test.obj mylib.obj



Предложение по регламенту.
Давай перенесем этот вопрос в форум "Средства Разработки". Я уже повесил бомбочку.
Заодно — пора бы уж зарегистрироваться, э?
Перекуём баги на фичи!
Re[14]: Как экспортировать-импортировать класс
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 24.06.03 09:22
Оценка:
Здравствуйте, Кодт, Вы писали:

К>bcc32 /c test.cpp

К>tlink test.obj mylib.obj

А вот так работать не будет — bcc32, вызывая tlink, кроме самих объектников передает ему рантаймовскую библиотеку и несколько ключей, и при ручном вызове tlink надо все это прописывать самому. Из легких путей правильные "bcc32 test.cpp mylib.obj" (или .lib) и даже "bcc32 /c test.cpp; bcc32 test.obj mylib.obj".
Re[14]: Зарегистрировался
От: MT  
Дата: 24.06.03 09:32
Оценка:
Так линкуются

bcc32 test.obj mylib.obj

Значит tlib не работает, но в чем причина не пойму.
Быстрее, лучше, дешевле — выбери любые два.
(Старая инженерная поговорка)
Re[14]: Как экспортировать-импортировать класс
От: MT  
Дата: 25.06.03 10:30
Оценка:
Кому интересно — добил tlib все таки:

bcc32 -IC:\PATH_TO_INCLUDE_DIR -LC:\PATH_TO_LIB_DIR test.cpp mylib.LIB

Т. е. надо и то и другое — путь и имя библиотеки... Борланду надо работать над хелп-ом.

Спасибо всем кто помог докапаться (Кодт и др)
Быстрее, лучше, дешевле — выбери любые два.
(Старая инженерная поговорка)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.