Re: Linkage problem with C++

Alejo Vinjoy <[email protected]>
Newsgroups gmane.comp.web.html-tidy.user
Message-ID <[email protected]>
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 <[email protected]> escribió:
De: Arnaud Desitter <[email protected]>
Asunto: Re: Linkage problem with C++
Para: [email protected]
Cc: [email protected]
Fecha: lunes, 15 de septiembre de 2008, 6:26 am

2008/9/14 Alejo Vinjoy <[email protected]>:
> 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
http://ar.mujer.yahoo.com/cocina/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.