Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Knihovny v Code::Blocks

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Knihovny v Code::Blocks

Autor: JiriValerian

18:42:17 18.10.2009

[color=#008000]kejv Napsal:
-------------------------------------------------------
> A mohl byste mi nejak vysvetlit (pripadne mi
> poskytnou nejaky odkaz), jak bych vyse uvedene
> veci resil s prekladacem Digital Mars (ktery jsem
> si dnes nove nainstaloval, protoze gcc se v
> nekterych pripadech choval podivne)?
>[/color]

Překladač [b]Digital Mars[/b] podporuje již zmíněnou [b]pragmu[/b]
a knihovny pro jeho linker mají příponu [b].lib[/b].

Takže si s překladačem [b]Digital Mars[/b] vytvořte knihovnu [b]libtisk.lib[/b]
a tu pak přidejte do příslušného [b]lib[/b] podadresáře překladače [b]Digital Mars[/b]
a pak stačí dát na začátek hlavičkového souboru [b]tisk.h[/b]

[b]#pragma comment(lib,"libtisk.lib")[/b]

a jakmile použijete přes [b]#include[/b] hlavičkový soubor [b]tisk.h[/b] v jiném projektu
tak k němu bude díky tomu automaticky linkována knihovna [b]libtisk.lib[/b].

[color=#008000]>
>> A co je na tom divného ??? C++ není zcela totéž co C,
>> a to ani ve vztahu ke knihovnám.
>>
> Prave, ze neni. Mozna jste prehledl, ze jsem psal
> "wizard se me nezepta, jestli chci C nebo C++".
>[/color]

V takovém případě obvykle záleží na koncovce zdrojáku tj. [b].c[/b] nebo [b].cpp[/b].
Knihovna může být vytvořena mixem klidně z několika [b].c[/b] a [b].cpp[/b].

Citovat příspěvek

 

Re: Knihovny v Code::Blocks

Autor: autor789

18:02:20 18.10.2009

Osobne nepredpokladam ze zmena kompilatoru automaticky eliminuje spominane problemy...
A)
vsetko sa sa urobit rucne, otazne je ci to stoji za tu namahu a problemy s tym spojene... Co ma teraz napadlo najrychlejsie (a najhnusnejsie) riesenie by bolo vytvorit novy subor a do neho vlozit tri riadky a nasledne kompilovat:
[quote]
#include "hlav.h"
#include "hlav.cpp"
#include "neco.cpp"
[/quote]
Osobne by som nieco take asi nepouzil a zostal pri "projektoch". Subory v jednom adresari byt nemusia, od toho je tu codeblocks a subor projektu, ktory popisuje relativne/absolutne cesty k jednotlivym suborom.Toto sa ale netyka includovania, tam treba vediet kde sa dany hlavickovy subor nachadza...
B)
To ci sa na kompilaciu pouzije c ale c++ kompilator zavisi od parametru uvedeneho vo vlastnosiach (properties) daneho suboru; zalozka advanced, pole Compiler variable.
Ad subory a cesty:
ked dame #include tak sa nam kompilator pozera do vsetkych "systemovych" adresarov (systemovych vzhladom na kompilator), napr: .\MinGW\include
ked pouzijeme #include "daco.h", prekladac hlada tento hlavickovy subor v adresari v aktualnom adresari (vzhladom na subor ktory obsahuje tuto direktivu), #include "../daco.h" zase pozera o adresar vyssie...
samotna skompilovana kniznica tisk.lib, libtisk.a, ..., sa tiez moze nachadzat kdekolvek, staci ak sa v nastaveniach projektu nastavi spravna cesta... Project -> Build option
Vela zdaru ;)

Citovat příspěvek

 

Re: Knihovny v Code::Blocks

Autor: ondra.holub

17:56:17 18.10.2009

Jestli to chcete v C, implementujte všechny části knihovny, které exportují symboly ven (public API) v souboru s příponou .c. Pak se to přeloží překladačem C. Pokud to strčíte do nějakého souboru s příponou běžnou pro C++ (např. cpp, cxx, C, cc), přeloží (a vyexportuje) se to překladačem C++.

Závěr - není třeba nikde specifikovat, jestli je to C nebo C++.

Přidat knihovnu do projektu je snadné. V menu Projekt->Build Options->Linker Settings stačí přidat příslušnou knihovnu. Pokud máte knihovny rozumně pojmenované, bude to fungovat pro každý překladač (pokud máte samozřejmě pro něj tu knihovnu).

Citovat příspěvek

 

Re: Knihovny v Code::Blocks

Autor: kejv

17:44:04 18.10.2009

A mohl byste mi nejak vysvetlit (pripadne mi poskytnou nejaky odkaz), jak bych vyse uvedene veci resil s prekladacem Digital Mars (ktery jsem si dnes nove nainstaloval, protoze gcc se v nekterych pripadech choval podivne)?

> A co je na tom divného ??? C++ není zcela totéž co
> C,
> a to ani ve vztahu ke knihovnám.
>
Prave, ze neni. Mozna jste prehledl, ze jsem psal "wizard se me [bold]nezepta[/bold], jestli chci C nebo C++".

Citovat příspěvek

 

Re: Knihovny v Code::Blocks

Autor: JiriValerian

17:26:48 18.10.2009

[color=#008000]kejv Napsal:
-------------------------------------------------------
> Mam par dotazu tykajicich se vytvareni a uzivani
> knihoven v prostredi Code::Blocks.
>
> A)
> Mam soubory neco.cpp, hlav.cpp, hlav.h, pricemz
> chci hlav.h includovat do neco.cpp. Vim, ze se to
> da vyresit vytvorenim jednoho projektu, kde do
> main.cpp zkopiruju obsah neco.cpp a pripojim
> zbyvajici soubory. Vse dam pak dohromady jedinym
> ctrl+f9. Jde to ale udelat nejak i "rucne" bez
> zastresovaciho projektu? Pripadne jak. Musi byt
> vsechny tri soubory v jednom adresari?
>[/color]

Nastavení různých parametrů projektu včetně např. linkovaných knihoven
jsou specifická pro ten či onen překladač a linker.

Já [b]Mingw[/b] vůbec nepoužívám. Takže jediné co mohu doporučit je prostudovat
si parametry příslušného překladače a linkeru, který používáte,
a to z jemu příslušné dokumentace.

Projekty jsou od toho abyste nemusel neustále měnit specifické parametry
pro překladač a linker, které by byly platné pro všechny překládané zdrojáky.
Celkem běžně se totiž používají různá specifická nastavení jako např.
seznam linkovaných knihoven apod., a to se nastavuje právě přes nastavení
parametrů, která se ukládají do projektu.

[color=#008000]>
> B)
> Jak se v Code::Blocks vytvareji knihovny? Zkousel
> jsem tento postup:
>
> Vyber novy projekt -> static library.
> Objevi se nejaky wizard, ktery se me ale nezepta,
> jestli chci psat pro C nebo C++, coz mi prijde
> divne.
>[/color]

[b]A co je na tom divného ??? C++[/b] není zcela totéž co [b]C[/b],
a to ani ve vztahu ke knihovnám.

[color=#008000]>
> Jmeno projektu je napr. "tisk".
> Pro ukazku mi postaci, kdyz za zdrojovy soubor
> budouci knihovny (jestli to chapu spravne) vezmu
> uz predvyplneny soubor main.c.
> Tento zkompiluju (ctr+f9).
> Vytvori se libtisk.a.
> K projektu pripojim prislusny hlavickovy soubor
> tisk.h.
> Ted vytvorim jiny projekt (console application),
> ktery bude knihovnu pouzivat.
> Otazka je, jakym zpusobem mu sdelit, kde tu
> knihovnu ma hledat?
> Jako nejjednodussi mi prislo proste zkopirovat
> tisk.h do ..\MinGW\include a libtisk.a do
> ..\MinGW\lib.
> [/color]

Ano.

[color=#008000]>
> Odtud se prece berou standardni knihovny a
> hlavickove soubory.
> Nicmene program funkce z tisk.h nenasel.
>
> Muze mi nekdo rict, v cem je problem? Je dobry
> napad ukladat vlastni knihovny do adresaru, jak
> jsem psal vyse, nebo je lepsi na ne vytvorit
> nejakou specialni slozku?
> [/color]

Jiné překladače než ty z [b]Mingw[/b] podporují vkládání knihoven přes [b]pragmu[/b] takto:

[b]#pragma comment(lib,"nazev_knihovny.lib")[/b]

Výhodou je, že se to dá napsat přímo do příslušného hlavičkového souboru.
Takže když se pak v jiném zdrojáku použije ten hlavičkový soubor, tak
se nemusí přidávat knihovna do projektu ani definovat v parametrech projektu
a přesto bude přilinkována právě díky té [b]pragma[/b] definici.

[b]Mingw[/b] by mohl podporovat:

[b]#pragma comment(lib,"nazev_knihovny.a")[/b]

ale bohužel nepodporuje.

Je tedy potřeba přidat příslušnou knihovnu do projektu nebo nadefinovat seznam
linkovaných knihoven do příslušného specifického parametru pro linker, který používáte.

Citovat příspěvek

 

Knihovny v Code::Blocks

Autor: kejv

16:39:02 18.10.2009

Mam par dotazu tykajicich se vytvareni a uzivani knihoven v prostredi Code::Blocks.

A)
Mam soubory neco.cpp, hlav.cpp, hlav.h, pricemz chci hlav.h includovat do neco.cpp. Vim, ze se to da vyresit vytvorenim jednoho projektu, kde do main.cpp zkopiruju obsah neco.cpp a pripojim zbyvajici soubory. Vse dam pak dohromady jedinym ctrl+f9. Jde to ale udelat nejak i "rucne" bez zastresovaciho projektu? Pripadne jak. Musi byt vsechny tri soubory v jednom adresari?

B)
Jak se v Code::Blocks vytvareji knihovny? Zkousel jsem tento postup:

Vyber novy projekt -> static library.
Objevi se nejaky wizard, ktery se me ale nezepta, jestli chci psat pro C nebo C++, coz mi prijde divne.
Jmeno projektu je napr. "tisk".
Pro ukazku mi postaci, kdyz za zdrojovy soubor budouci knihovny (jestli to chapu spravne) vezmu uz predvyplneny soubor main.c.
Tento zkompiluju (ctr+f9).
Vytvori se libtisk.a.
K projektu pripojim prislusny hlavickovy soubor tisk.h.
Ted vytvorim jiny projekt (console application), ktery bude knihovnu pouzivat.
Otazka je, jakym zpusobem mu sdelit, kde tu knihovnu ma hledat?
Jako nejjednodussi mi prislo proste zkopirovat tisk.h do ..\MinGW\include a libtisk.a do ..\MinGW\lib.
Odtud se prece berou standardni knihovny a hlavickove soubory.
Nicmene program funkce z tisk.h nenasel.

Muze mi nekdo rict, v cem je problem? Je dobry napad ukladat vlastni knihovny do adresaru, jak jsem psal vyse, nebo je lepsi na ne vytvorit nejakou specialni slozku?

Predem diky za odpovedi

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: