Maly1990 utworzono 1 sierpnia 2010 utworzono 1 sierpnia 2010 (edytowane) Nie wiem jak się dodaje do Dev C++ biblioteki, aby można było z nich korzystać. Przypuśćmy, że napisałem jakąś tam bibliotekę statyczną. Pliki są takie: -Projekt.a -biblioteka.o Co gdzie trzeba skopiować żeby to normalnie działało po zaincludowaniu w kodzie programu. Edytowane 3 sierpnia 2010 przez jesiona wstawiam tag //jesiona
winuser komentarz 1 sierpnia 2010 komentarz 1 sierpnia 2010 Potrzebujesz tylko plik .a, w kodzie w którym masz zamiar korzystać z biblioteki dołączasz nagłowek biblioteki a potem w opcjach projektu na zakładce `Parameters` klikasz `Add library` i wybierasz swój plik .a
Maly1990 komentarz 2 sierpnia 2010 Autor komentarz 2 sierpnia 2010 W Dev c++ nie ma takiej opcji jak add library. Można dodać pliki do konsolidatora, albo kompilatora.
winuser komentarz 2 sierpnia 2010 komentarz 2 sierpnia 2010 A o tym co powiesz ? [img]http://img.nopaste.pl/upload/lib_4c57419439eb9.png[/img] Biblioteki dodaje się do linkera, nie kompilatora.
Maly1990 komentarz 2 sierpnia 2010 Autor komentarz 2 sierpnia 2010 (edytowane) Dobra masz racje bo masz starszą wersje Dev. linker i konsolidator to to samo No to do linkera podajemy plik z rozszerzeniem .a, natomiast includujemy plik z rozszerzeniem .h? Dobrze myśle? Edytowane 2 sierpnia 2010 przez Maly1990
winuser komentarz 2 sierpnia 2010 komentarz 2 sierpnia 2010 Zgadza się. Co do wersji dev`a to nie wiem czy jest jeszcze jakaś nowsza, bo pobrałem pierwszą jaką mi wypluł google.
Maly1990 komentarz 5 sierpnia 2010 Autor komentarz 5 sierpnia 2010 Zrobilem tak includowalem plik naglowkowy o rozszerzeniu .h i dodalem do konsolidatora (kompilatora) biblioteke o rozszerzeniu .a i wyskakuje blad [linker error] undefined reference to 'glos()'. Co jeszcze trzeba zrobic by to dzialo?
winuser komentarz 5 sierpnia 2010 komentarz 5 sierpnia 2010 Linker nie znajduje funkcji glos() (czy jest zawarta na 100 % w pliku .a który dodałeś ?).
Maly1990 komentarz 5 sierpnia 2010 Autor komentarz 5 sierpnia 2010 Powinno byc Plik dll.h [code] #ifndef _DLL_H_ #define _DLL_H_ #if BUILDING_DLL # define DLLIMPORT __declspec (dllexport) #else /* Not BUILDING_DLL */ # define DLLIMPORT __declspec (dllimport) #endif /* Not BUILDING_DLL */ class DLLIMPORT DllClass { public: DllClass(); virtual ~DllClass(void); private: }; void glos(); #endif /* _DLL_H_ */ [/code] Plik dllmain.cpp [code] /* Replace "dll.h" with the name of your header */ #include "dll.h" #include <windows.h> #include <iostream> DllClass::DllClass() { } DllClass::~DllClass () { } void glos() { std::cout<<"as"; } BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ , DWORD reason /* Reason this function is being called. */ , LPVOID reserved /* Not used. */ ) { switch (reason) { case DLL_PROCESS_ATTACH: break; case DLL_PROCESS_DETACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } /* Returns TRUE on success, FALSE on failure */ return TRUE; } [/code] Moze tu gdzies popelnilem blad
winuser komentarz 5 sierpnia 2010 komentarz 5 sierpnia 2010 Mogłeś odrazu mówić, że chcesz statycznie linkować bibliotekę dll. W takim razie twoja funkcja `glos` powinna wyglądać tak : [code]extern "C" void __declspec (dllexport) glos() { // tutaj kod funkcji }[/code]
Maly1990 komentarz 6 sierpnia 2010 Autor komentarz 6 sierpnia 2010 Nie wiem dlaczego ale tak też nie dziala. Masz moze jakis kurs co do robienia bibliotek?
winuser komentarz 6 sierpnia 2010 komentarz 6 sierpnia 2010 Sprecyzuj, chcesz robić statycznie ładowaną bibliotekę DLL (plik .h .dll oraz .a) czy ogólnie bibliotekę statyczną (plik .h oraz .a). Jeśli tą pierwszą to w katalogu z exe który importuje funkcję, musi znajdować się ta biblioteka DLL.
younger0001 komentarz 11 sierpnia 2010 komentarz 11 sierpnia 2010 [quote]Dobra masz racje bo masz starszą wersje Dev. linker i konsolidator to to samo[/quote] Ja mam polską wersję tego programu i miałem napisane "konsolidator" gdy przez przypadek wziełęm angielską wersję instalacji to miałem linker
Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!
Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.