- From: Arnaud Desitter <arnaud02@users.sourceforge.net>
- Date: Mon, 15 Sep 2008 13:17:28 +0100
- To: avinjoy@yahoo.com.ar
- Cc: html-tidy@w3.org
It looks like you are using a shared library. Looks at the /usr/local/lib/tidy.*and their date. If tidy.so.* is old, then you are linking with a former version of tidylib. Linking with /usr/local/lib/libtidy.a may be a better strategy. It may be that LD_LIBRARY_PATH needs to include /usr/local/lib. You may be better served by using build/gmake/Makefile in the tidy distribution and link explicitly with libtidy.a without installing tidy itself. Regards, 2008/9/15 Alejo Vinjoy <avinjoy@yahoo.com.ar>: > Thanks so much for the help Arnaud it compiled perfectly, but when I ran it > said: > > avinjoy@localhost:~/workspace/tidyPrueba$ g++ -g -Wall -I/usr/local/include > main.cpp -L/usr/local/lib -ltidy -oparser > avinjoy@localhost:~/workspace/tidyPrueba$ ./parser > ./parser: symbol lookup error: ./parser: undefined symbol: tidyNodeGetValue > > It would seem that all the other functions are define (I tried with > tidyNodeGetText and it worked fine) but not this one. > > /usr/local/lib is the directory where the tidylib is installed using > gnuauto. > The code I'm using is basically the same as the example in the web page with > a few things modified: > > > void dumpNode( TidyNode tnod, int indent, TidyDoc tdoc ,TidyBuffer *output ) > { > TidyNode child; > Bool interesa; > > for ( child = tidyGetChild(tnod); child; child = tidyGetNext(child) ) > { > ctmbstr name; > switch ( tidyNodeGetType(child) ) > { > case TidyNode_Root: name = "Root"; break; > case TidyNode_DocType: name = "DOCTYPE"; break; > case TidyNode_ProcIns: name = "Processing Instruction"; break; > case TidyNode_Text: name = "Text"; break; > case TidyNode_CDATA: name = "CDATA"; break; > case TidyNode_Section: name = "XML Section"; break; > case TidyNode_Asp: name = "ASP"; break; > case TidyNode_Jste: name = "JSTE"; break; > case TidyNode_Php: name = "PHP"; break; > case TidyNode_XmlDecl: name = "XML Declaration"; break; > > case TidyNode_Start: > case TidyNode_End: > case TidyNode_StartEnd: > default: > { > if ((tidyNodeGetType(child) == TidyNode_Comment) || > tidyNodeIsADDRESS(child) || > tidyNodeIsAPPLET(child) || > tidyNodeIsBASE(child) || > tidyNodeIsBASEFONT(child) || > tidyNodeIsCAPTION(child) || > tidyNodeIsCOL(child) || > tidyNodeIsCOLGROUP(child) || > tidyNodeIsDD(child) || > tidyNodeIsDIR(child) || > tidyNodeIsDL(child) || > tidyNodeIsEMBED(child) || > tidyNodeIsEM(child) || > tidyNodeIsFRAME(child) || > tidyNodeIsFRAMESET(child) || > tidyNodeIsIMG(child) || > tidyNodeIsISINDEX(child) || > tidyNodeIsLINK(child) || > tidyNodeIsLAYER(child) || > tidyNodeIsLISTING(child) || > tidyNodeIsMAP(child) || > tidyNodeIsMARQUEE(child) || > tidyNodeIsMENU(child) || > tidyNodeIsMETA(child) || > tidyNodeIsNOBR(child) || > tidyNodeIsNOFRAMES(child) || > tidyNodeIsNOSCRIPT(child) || > tidyNodeIsOBJECT(child) || > tidyNodeIsOL(child) || > tidyNodeIsOPTGROUP(child) || > tidyNodeIsPARAM(child) || > tidyNodeIsPRE(child) || > tidyNodeIsProp(tdoc,child) || > tidyNodeIsQ(child) || > tidyNodeIsS(child) || > tidyNodeIsSCRIPT(child) || > tidyNodeIsSELECT(child) || > tidyNodeIsSTYLE(child) || > tidyNodeIsSPACER(child) || > tidyNodeIsTABLE(child) || > tidyNodeIsTR(child) || > tidyNodeIsWBR(child) || > tidyNodeIsXMP(child) > ) > { > tidyBufClear(output); > continue; > } > else{ > //name = tidyNodeGetName( child ); > interesa=(Bool)1; > } > } > } > if (interesa) > { > //assert( name != NULL ); > //printf( "\%*.*sNode: \%s\n", indent, indent, " ", name ); > tidyBufClear(output); > tidyNodeGetValue(tdoc,child,output); > std::cout << "Value: " << output->bp <<std::endl; > } > dumpNode( child, indent + 4,tdoc, output); > } > } > > void dumpBody( TidyDoc tdoc, TidyBuffer *output ) > { > dumpNode( tidyGetBody(tdoc), 0, tdoc, output ); > } > > An this fucntion gets called from the main function in the same file > > TidyBuffer output; > TidyBuffer errbuf; > int rc = -1; > Bool ok; > > tidyBufInit(&output); > tidyBufInit(&errbuf); > > TidyDoc tdoc = tidyCreate(); > ok = tidyOptSetBool( tdoc, TidyXhtmlOut, yes ); // Convert to XHTML > if ( ok ) > rc = tidySetErrorBuffer( tdoc, &errbuf ); // Capture diagnostics > if ( rc >= 0 ) > rc = tidyParseFile(tdoc, "ejemplo.htm"); // Parse the input > if ( rc >= 0 ) > rc = tidyCleanAndRepair( tdoc ); // Tidy it up! > if ( rc >= 0 ) > //rc = tidyRunDiagnostics( tdoc ); > dumpBody(tdoc, &output); > > tidyBufFree(&output); > tidyBufFree(&errbuf); > tidyRelease(tdoc); > return rc; > } > > Could it be a bug in the installation? > > Thanks so much, in advance > Alejo > > > > --- El lun 15-sep-08, Arnaud Desitter <arnaud02@users.sourceforge.net> > escribió: > > De: Arnaud Desitter <arnaud02@users.sourceforge.net> > Asunto: Re: Linkage problem with C++ > Para: avinjoy@yahoo.com.ar > Cc: html-tidy@w3.org > Fecha: lunes, 15 de septiembre de 2008, 6:26 am > > 2008/9/14 Alejo Vinjoy <avinjoy@yahoo.com.ar>: >> Hi, I downloaded and installed Html tidy from sourceforge CVS. >> I followed the instructions and installed it using autotools in gnuauto >> directory and it installed correctly. >> I verified that the libraries are in /usr/local/lib directory. >> When I' trying to compile and link a little program I made using this > line >> g++ -g -Wall -otidys main.cpp -L ./usr/local/lib > > Use: > g++ -g -Wall -I/usr/local/include main.cpp -L/path/to/tidy/lib -ltidy > > Regards, > >> >> I get these error messages: >> /home/loc/workspace/tidyReloaded/main.cpp:33: undefined reference to >> `tidyNodeGetType' >> /home/loc/workspace/tidyReloaded/main.cpp:33: undefined reference to >> `tidyNodeIsADDRESS' >> /home/loc/workspace/tidyReloaded/main.cpp:33: undefined reference to >> `tidyNodeIsAPPLET' >> >> and so > on.. >> >> Obviously I'm doing something wrong, could anyone point mein the right >> direction? >> Is this g++ -g -Wall -otidys main.cpp -L ./usr/local/lib correct for >> compilation? >> >> Thanks, >> Alejo >> >> >> >> ________________________________ >> Yahoo! Cocina >> Recetas prácticas y comida saludable >> Visitá http://ar.mujer.yahoo.com/cocina/ > > ________________________________ > Yahoo! Cocina > Recetas prácticas y comida saludable > Visitá http://ar.mujer.yahoo.com/cocina/
Received on Monday, 15 September 2008 13:50:28 UTC