Toon posts:

[C++]Probleem met lib

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer een library aan te spreken in een constructor-functie dmv

code:
1
2
3
4
5
6
7
8
using namespace Dv;
ConfigParser::ConfigParser(const string& configspecs) throw (runtime_error): configfile_(configspecs){
        ifstream ifs(configfile().c_str());
        if (!ifs)
                throw runtime_error(configfile() + " kon niet geopend worden");
        Util::Props config(ifs);
        _port = config("portnr");
}


Dat levert volgende error:
configparser.o(.text+0x11c): In function `ConfigParser::ConfigParser[not-in-charge](std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/home/user01/Desktop/project/parser/configparser.C:18: undefined reference to `Dv::Util::Props::Props[in-charge](std::basic_istream<char, std::char_traits<char> >&)'
configparser.o(.text+0x12e):/home/user01/Desktop/project/parser/configparser.C:18: undefined reference to `Dv::Util::Props::~Props [in-charge]()'
configparser.o(.text+0x390): In function `ConfigParser::ConfigParser[in-charge](std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/home/user01/Desktop/project/parser/configparser.C:18: undefined reference to `Dv::Util::Props::Props[in-charge](std::basic_istream<char, std::char_traits<char> >&)'
configparser.o(.text+0x3a2):/home/user01/Desktop/project/parser/configparser.C:18: undefined reference to `Dv::Util::Props::~Props [in-charge]()'
configparser.o(.text+0x180):/home/user01/Desktop/project/parser/configparser.C:19: undefined reference to `Dv::Util::Props::operator[](std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
configparser.o(.text+0x18f):/home/user01/Desktop/project/parser/configparser.C:19: undefined reference to `Dv::Util::Props::Value::operator int() const'
collect2: ld returned 1 exit status
make: *** [shttpd] Fout 1

Het vlot niet echt met deze constructor dus ;(. Naar wat ik ervan begrijp wordt er dus geen passende functie gevonden die 'Util::Props config(ifs); ' kan invullen en dus ook geen goede operator[] of operator(). De library is volledig geinstalleerd. Ze bevat een constructor
code:
1
Dv::Util::Props::Props ( std::istream & is )

Die leest lijntjes van de vorm 'key=value" uit een istream

Als voorbeeld bij deze lib kreeg ik onderstaande code mee (maar die werkt evenmin):
code:
1
2
3
4
5
6
7
8
9
 ifstream ifs("/usr/local/share/z.config");
 Props config(ifs);
 try {
   int max = config["max"];
   }
 catch (PropsException& e) {
   cerr << "Configuration file does not define 'max'" << endl;
   exit(1);
   }


Iemand een idee waarom die Props-constructor niet wordt geactiveerd?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-05 23:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Het is een link error, geen compile error. Dat wil dus zeggen dat die functie wel is gedefinieerd, maar niet gevonden in een van de meegelinkte libraries. Heb je de specifieke library sowieso wel toegevoegd aan de linker?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Stom vraagje misschien, maar link je de library wel uberhaupt mee?

-Edit-
Ik typ kennelijk te langzaam :P

[ Voor 25% gewijzigd door ^Mo^ op 20-07-2004 23:51 ]

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Verwijderd

Topicstarter
Ze zit er netjes in en zou dus moeten gespot worden:
code:
1
#include <dvutil/props.h>

  • Amotea
  • Registratie: Mei 2004
  • Laatst online: 23-01-2025
Is er geen .lib nodig?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 14:53

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 21 juli 2004 @ 00:02:
Ze zit er netjes in en zou dus moeten gespot worden:
code:
1
#include <dvutil/props.h>
Een library is wat anders dan een header meen ik te weten met mijn gebrekkige C++ kennis. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-05 23:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Idd, dit is een wel erg basic probleem :)

In headers staan alleen definities zodat de compiler begrijpt wat je bedoelt. De daadwerkelijke (al gecompileerde) code die erachter zit moet nog wel meegelinkt worden om de uiteindelijke executable te vormen. Geen idee welke compiler je gebruikt, maar meestal kun je de library toevoegen door 'm simpelweg toe te voegen aan de commandline argument lijst

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Stom probleem idd. Iig bedankt voor de tips. Ik compileer overigens met g++, maar ben er al uit (dankzij jullie opmerkingen want dacht dat het probleem in de code zat en niet in de make).
Makefile aangepast tot
code:
1
2
3
4
5
6
7
8
9
10
//blabla
// -ldvnet duikt later nog op (moet client-server app worden)
LDFLAGS=-Wl,-rpath -Wl,/usr/local/lib -L/usr/local/lib - ldvnet -ldvutil
CXX=g++
CCFILES= shttpd.C configparser.C
OBJECTS=$(CCFILES:%.C=%.o)

shttpd: $(OBJECTS)
        $(CXX) -o $@ $^ $(LDFLAGS)
//blabla

en het ding doet nu eindelijk wat ik wil.
Pagina: 1