This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

codec engine use adapted g729 algorithm failure



It seems like all file are created in adapter, but I still haven't figured out how to use the adapter in codec engine. When I intergrated adapted g729 codec into codec engine and build server, an error occured.

undefined                                                       first referenced                   

  symbol                                                                in file                        

 ---------                                                              ----------------                   

 G729ABENC_YS_IG729ABENC_ADAPT   package/cfg/bin/all_DSP_pe674.oe674

 

The IALG interface still not use in the codec engine, how to fix it ?

This is My adapted g729 codec package, I deleted the g729 library in /lib

0511.g729abenc.tar.gz

  • Benlu,

    Can you verify that the library where the missing symbol is defined, is actually getting linked into your executable?  You can look at the .xdl file in package/cfg/bin, and check for the library g729abenc_ys_elf.ae674 (at least, that's what I think it should be based on your attached archive file).

    Best regards,

        Janet

  • Janet,

    I can't find .xdl file in package/cfg/bin, there is nothing in package/cfg/. I still don't konw how symbol linked into executable file, and how to check if symbol is defined in the library g729abenc_ys_elf.ae674.

  • This is new result for server build  error:

     

    undefined                                                                          first referenced                                                                                                                                                                         

      symbol                                                                                     in file                                                                                                                                                                              

     ---------                                                                                  ----------------                                                                                                                                                                         

     G729ABENC_TII_IG729ABENC                         /usr/local/ezsdk_5_02/componentsources/codec_engine_3_21_00_19/examples/ti/sdo/ce/examples/codecs/g729abenc/ysg729abenc

    /adapter/lib/g729abenc_ys_elf.ae674<g729abenc_ys_g729abenc.oe674>

     

    The .xdl file is here :

    7762.all_DSP_pe674.xdl.txt

  • Benlu,

    The xdl file shows that you are linking with the libraries

    /usr/local/ezsdk_5_02/component-sources/codec_engine_3_21_00_19/examples/ti/sdo/codecs/g729abdec/lib/g729abdec_tii_elf.l64P

    /usr/local/ezsdk_5_02/component-sources/codec_engine_3_21_00_19/examples/ti/sdo/ce/examples/codecs/g729abenc/ysg729abenc/adapter/lib/g729abenc_ys_elf.ae674

    However, I think the link order is causing your undefined symbol error.  Your ti.sdo.ce.examples.codecs.g729abenc.ysg729abenc.ce package has a requires on both the codec package and the adapter package, as these lines in the package.xdc file indicate:

    requires ti.sdo.ce.examples.codecs.g729abenc;
    requires ti.sdo.ce.examples.codecs.g729abenc.ysg729abenc.adapter;

    That is causing the two libraries to be pulled in.  However, the adapter package is the one with the dependency on the g729abenc package.  I think if you remove the

    requires ti.sdo.ce.examples.codecs.g729abenc;

    from the ce package.xdc and put it in the package.xdc for the ti.sdo.ce.examples.codecs.g729abenc.ysg729abenc.adapter, your link problem should go away. So modified package.xdc for the adapter should look like:

    requires ti.sdo.ce.examples.codecs.g729abenc;

    /*!
     *  ======== package.xdc ========
     *  Adapter package for the  g729abenc algorithm that works with G729ABENC
     *  interface supported by custom stubs and skeletons.
     *
     */

    package ti.sdo.ce.examples.codecs.g729abenc.ysg729abenc.adapter {
    }

    And modified package.xdc file for ce should look like:

    requires ti.sdo.ce.examples.codecs.g729abenc.ysg729abenc.adapter;

    /*!
     *  ======== package.xdc ========
     *  Codec Engine compatible g729abenc algorithm package
     *
     *  Defines a module for use in Codec Engine server.
     *  This module implements an interface supported by custom stubs and skeletons
     */
    package ti.sdo.ce.examples.codecs.g729abenc.ysg729abenc.ce {
        module G729ABENC;
    }

    Also, in the first rar file you posted, the lib directory of g729abenc was empty.  You should also make sure that the library is there.

    Best regards,

        Janet

  • Janet,

    I'm sorry, I didn't see the undefined symbol "G729ABENC_TII_IG729ABENC" is different from first time. It isn't the adapter fxns table interface, it's the g729abenc library interface symbol according to g729ab application development document.

    Also, I don't konw how to call g729abenc library interface symbol. when I build adapter, there haven't the link print "will link with lib/g729abenc_tii_elf.l64P..." 

  • Benlu,

    I suspect the problem may be with your getLibs() function at the top of the g729abenc directory (in the zip file from your first post):

    function getLibs(prog)
    {
        var lib = null;

        if (prog.build.target.isa == "l64P") {

            lib = "lib/g729abenc_tii_elf.l64P";

            print("    will link with " + this.$name + ":" + lib);
        }

       
    return (lib);
    }

    I think your target isa is actually "64P", and not "l64P".  With problems like this, I usually add print() statements to the getLibs() function to try to figure out what is going wrong.  For example, at the beginning of getLibs(), you could print the target isa with:

        print("**** g729abenc getLibs: prog.build.target.isa = " + prog.build.targ.isa);

    This function must be returning null for the library.  But also, as I mentioned earlier, that lib directory is empty.  Is that where your codec library (g729abenc_tii_elf.l64P) is located?

    Best regards,

        Janet

     

  • Janet, 

    Thanks,

    The reason cause undefined symbol is my getLibs() function return null, I printed the target.isa like you and changed it,  the g729abenc library linked by codec server successfully!