x-kom hosting

[C++] Dodawanie bibliotek w Dev c++

Maly1990
utworzono
utworzono (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 przez jesiona
wstawiam tag //jesiona

winuser
komentarz
komentarz

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
komentarz

W Dev c++ nie ma takiej opcji jak add library. Można dodać pliki do konsolidatora, albo kompilatora.

winuser
komentarz
komentarz

A o tym co powiesz ?
[img]http://img.nopaste.pl/upload/lib_4c57419439eb9.png[/img]

Biblioteki dodaje się do linkera, nie kompilatora.

Maly1990
komentarz
komentarz (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 przez Maly1990
winuser
komentarz
komentarz

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
komentarz

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
komentarz

Linker nie znajduje funkcji glos() (czy jest zawarta na 100 % w pliku .a który dodałeś ?).

Maly1990
komentarz
komentarz

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
komentarz

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
komentarz

Nie wiem dlaczego ale tak też nie dziala.
Masz moze jakis kurs co do robienia bibliotek?

winuser
komentarz
komentarz

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
komentarz

[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.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.