Problémy s knihovnami

Ales DOLECEK ales_d na seznam.cz
Pondělí Únor 24 23:22:32 CET 2003


Dobrý den,

  na svém domácím počítači jsem napsal a odladil malý program. Na jiném
stroji, kde má program ve finále běžet, jsou ovšem trichu nestandardně
nainstalovány knihovny. Při pokusu o kompilaci dostanu následující
chybová hlášení:

-bash-2.05b$ gcc -L/usr/local/lib -lpopt -ologbot *.o
logbot.o: In function `main':
/home/alesd/src/LogBot/logbot.c(.text+0x288): undefined reference to
`getopt_long'
logbot.o: In function `game_over':
/home/alesd/src/LogBot/logbot.c:625: undefined reference to
`open_memstream'

getopt.h leží v "/usr/local/include" spolu s několika dalšími
hlavičkovými soubory, které nejsou v "/usr/include". Předpokládám, že
odpovídající knihovny jsou v "/usr/local/lib". Knihovna "libpopt.so"
(která by snad měla obsahovat fce z "getopt.h") na uvedené cestě leží.
Bohužel přidání "-L/usr/local/lib -lpopt" (viz výše) nepomáhá.

Je možná, že by uvedená fce. byla v jiné knihovně?
Jak je možné zjistit, které fce. knihovna obsahuje?
Nebo je chyba někde jinde?

Předpokládám, že s "open_memstream" je situace podobná. Nutno
podotknout, že i na mém domácím stroji dostávám následující hlášení:

gcc -g -Wall -c logbot.c
logbot.c: In function `game_over':
logbot.c:570: warning: implicit declaration of function `open_memstream'
logbot.c:570: warning: initialization makes pointer from integer without
a cast

Pokud si to dobře vykládám, není v žádném hlavičkovém souboru uvedena
deklarace funkce (info clib uvádí, že deklarace má být v "stdio.h",
který mám samozřejmě v #include), takže překladač použije default a
předpokládá, že fce vrací int. V knihovnách fce. "open_memstream" je a
tak si linker nestěžuje (na rozdíl od cílového systému). Výsledný
program funguje bez problémů.

Víte někdo jak odstranit tuto vadu (jinak, než si deklarovat prototyp ve
svém programu), nebo ji mohu klidně ignorovat - tak jak jsem to dělal
doposud.

                         Předem děkuji za radu - Aleš

                    Děkuji Aleš


Další informace o konferenci Linux