Forum » Programiranje » [C++ & Linux & G++ prevljalnik]Kako dodati knjižnico?
[C++ & Linux & G++ prevljalnik]Kako dodati knjižnico?
balocom ::
eee, mam en problem v linux okolju z g++ prevajalnikom. Pri prevajnju mi vrže vn napako:
marko.cpp:13: error: ‘ow_init’ was not declared in this scope
To napako mi vrže vn ne glede na to da pokažem z -l na .h, na .a ali pa na .so datoteko (pa tudi ob headerja sm dal poleg standardnih knjižnic), pravtako so tudi datoteke, ki so v lib mapi dane zraven drugih knjižnic.
marko.cpp:13: error: ‘ow_init’ was not declared in this scope
To napako mi vrže vn ne glede na to da pokažem z -l na .h, na .a ali pa na .so datoteko (pa tudi ob headerja sm dal poleg standardnih knjižnic), pravtako so tudi datoteke, ki so v lib mapi dane zraven drugih knjižnic.
V svetu brez googla bi bil najbolj uporabljen ukaz v bash-u ukaz man
balocom ::
-l je bil mišljen kot mali L...
.h in .so so v /usr mapi (v include pa v lib podmapi), ker, ko nardim include na .h ne javi da ne najde include fajla, ko pa hočem uporabiti funkcijo iz tega .h pa javi da tega ne najde
Any idea???
.h in .so so v /usr mapi (v include pa v lib podmapi), ker, ko nardim include na .h ne javi da ne najde include fajla, ko pa hočem uporabiti funkcijo iz tega .h pa javi da tega ne najde
Any idea???
V svetu brez googla bi bil najbolj uporabljen ukaz v bash-u ukaz man
fiction ::
> To napako mi vrže vn ne glede na to da pokažem z -l na .h, na .a ali pa na .so datoteko
> (pa tudi ob headerja sm dal poleg standardnih knjižnic),
> pravtako so tudi datoteke, ki so v lib mapi dane zraven drugih knjižnic.
A pa si siguren da ves kaj delas? -lsomething pomeni, da se bo pri linkanju programa uporabila knjiznica
libsomething.so (oz. libsomething.a ce das -static). In sicer iz /lib oz. /usr/lib. Z -L nastavis lahko dodatno pot iskanja.
Header file ima naceloma notri samo definicijo funkcije (ne pa tudi implementacije) tako da nima veze tudi ce manjka
(in prava opcija za to je -I).
Vazno je samo, da se pri povezovanju prevedenih delov ta funkcija nekje najde.
Sicer nisem siguren kaj ow_init() sploh dela, ampak kolikor gledam na http://www.owfs.org,
izgleda kot da je OW pisano z veliko - torej OW_init().
> (pa tudi ob headerja sm dal poleg standardnih knjižnic),
> pravtako so tudi datoteke, ki so v lib mapi dane zraven drugih knjižnic.
A pa si siguren da ves kaj delas? -lsomething pomeni, da se bo pri linkanju programa uporabila knjiznica
libsomething.so (oz. libsomething.a ce das -static). In sicer iz /lib oz. /usr/lib. Z -L nastavis lahko dodatno pot iskanja.
Header file ima naceloma notri samo definicijo funkcije (ne pa tudi implementacije) tako da nima veze tudi ce manjka
(in prava opcija za to je -I).
Vazno je samo, da se pri povezovanju prevedenih delov ta funkcija nekje najde.
Sicer nisem siguren kaj ow_init() sploh dela, ampak kolikor gledam na http://www.owfs.org,
izgleda kot da je OW pisano z veliko - torej OW_init().
balocom ::
Pri OW_initi vrže vn:
marko.cpp:(.text+0xb6): undefined reference to `OW_init'
collect2: ld returned 1 exit status
Če pa pot prestavim v mapo iz kjer sem include skopiral, pa mi enostavno izpiše da ne more najti includa (v mislih imam .so fajl) (pa tuk kot root sm probal če bo slučajno kaj razlike).
(ja vem kaj delam, pač hočm en svoj program napisat pa uporablam ene hedaerje in knjižnice ki ne pridejo standardno zraven prevajalnika).
marko.cpp:(.text+0xb6): undefined reference to `OW_init'
collect2: ld returned 1 exit status
Če pa pot prestavim v mapo iz kjer sem include skopiral, pa mi enostavno izpiše da ne more najti includa (v mislih imam .so fajl) (pa tuk kot root sm probal če bo slučajno kaj razlike).
(ja vem kaj delam, pač hočm en svoj program napisat pa uporablam ene hedaerje in knjižnice ki ne pridejo standardno zraven prevajalnika).
V svetu brez googla bi bil najbolj uporabljen ukaz v bash-u ukaz man
fiction ::
Ja, samo include != .so file.
.so file je shared object - deljena knjiznica, ki vsebuje definicijo neke funkcije in sicer je tukaj notri
ze prevedena koda.
Header file oz. tisto kar includas je pa tekstno in vsebuje samo nekaj v stilu:
void function();
Torej .so datoteke nic ne includas!
error: ‘ow_init’ was not declared in this scope
Ok, to ocitno pomeni, da ne najde deklaracije (v C-ju ponavadi dela tudi brez predhodne deklaracije - kar sicer ni lepo
ampak ok, C++ pa ocitno tega ne dovoli).
marko.cpp:(.text+0xb6): undefined reference to `OW_init'
Ta error mi zgleda bolje - dejansko se je zadeva prevedla (kar pomeni da je ocitno
stvar nasla deklaracijo za OW_init() v neki .h datoteki), samo na koncu linker ni
mogel vsega spakirati skupaj ker ni bilo nikjer definicije za OW_init().
Probaj -L/pot/do/neke/so.datoteke -lime
pri cemer je /pot/do/neke/so.datoteke/libime.so tista datoteka.
.so file je shared object - deljena knjiznica, ki vsebuje definicijo neke funkcije in sicer je tukaj notri
ze prevedena koda.
Header file oz. tisto kar includas je pa tekstno in vsebuje samo nekaj v stilu:
void function();
Torej .so datoteke nic ne includas!
error: ‘ow_init’ was not declared in this scope
Ok, to ocitno pomeni, da ne najde deklaracije (v C-ju ponavadi dela tudi brez predhodne deklaracije - kar sicer ni lepo
ampak ok, C++ pa ocitno tega ne dovoli).
marko.cpp:(.text+0xb6): undefined reference to `OW_init'
Ta error mi zgleda bolje - dejansko se je zadeva prevedla (kar pomeni da je ocitno
stvar nasla deklaracijo za OW_init() v neki .h datoteki), samo na koncu linker ni
mogel vsega spakirati skupaj ker ni bilo nikjer definicije za OW_init().
Probaj -L/pot/do/neke/so.datoteke -lime
pri cemer je /pot/do/neke/so.datoteke/libime.so tista datoteka.
balocom ::
še vedno isto, ne glede na to kter include sprobam ne glede na njegovo končnico...
V svetu brez googla bi bil najbolj uporabljen ukaz v bash-u ukaz man
BigWhale ::
g++ -I/pot/do/include/datotek -o MyExecutableName -L/pot/do/dodatnih/knjiznjic -llibFoo lala.c
Takole nekako...
Parametri pa so:
-I za compiler, dodatni include direktorij
-L za linker, direktorij kjer naj isce obstojece knjiznjice
-l za linker, ime knjiznice, ki naj jo linka (brez .so koncnice)
Takole nekako...
Parametri pa so:
-I za compiler, dodatni include direktorij
-L za linker, direktorij kjer naj isce obstojece knjiznjice
-l za linker, ime knjiznice, ki naj jo linka (brez .so koncnice)
fiction ::
> -l za linker, ime knjiznice, ki naj jo linka (brez .so koncnice)
In kolikor vem tudi brez "lib" prefiksa v imenu.
Ce das se -static (poleg -lime) bo zadeva uporabila libime.a (kar je v bistvu
ar arhiv normalno prevedenih objektnih datotek - .o), za
.so morajo biti prevedene s -fPIC.
In kolikor vem tudi brez "lib" prefiksa v imenu.
Ce das se -static (poleg -lime) bo zadeva uporabila libime.a (kar je v bistvu
ar arhiv normalno prevedenih objektnih datotek - .o), za
.so morajo biti prevedene s -fPIC.
balocom ::
g++ marko.cpp -I/opt/owfs/include -L/opt/obfs/lib/ /opt/owfs/lib/libowcapi.so -O3 -s -o program
prevedeno
Ej, thx za tole.
prevedeno
Ej, thx za tole.
V svetu brez googla bi bil najbolj uporabljen ukaz v bash-u ukaz man
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Code:Blocks, c++] Program ne najde knjižniceOddelek: Programiranje | 1377 (1156) | gtu |
» | Qt Designer -> KDevelop C++ ErrorOddelek: Programiranje | 2131 (1661) | 'FireSTORM' |
» | [C] MySQLOddelek: Programiranje | 2823 (1845) | Tutankhamun |
» | [C++] Kateri C++ IDE je najbolj osnoven?Oddelek: Programiranje | 2283 (1728) | sid_dabster |
» | c++ vstavljanje knjižnice v kodoOddelek: Programiranje | 1627 (1286) | SasoS |