undefined symbol: vanc_meta_get_info

classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

undefined symbol: vanc_meta_get_info

jpoet
I am writing a new meta lib, and have been battling trying to solve:

```
$ gst-inspect-1.0 decklinkvideosrc

(gst-plugin-scanner:10063): GStreamer-WARNING **: Failed to load plugin '/opt/gst/lib/gstreamer-1.0/
libgstdecklink.so': /opt/gst/lib/gstreamer-1.0/libgstdecklink.so: undefined symbol: vanc_meta_get_info
```

What is interesting about this, is that the exact same library/header/c file defines:
```
VANCMeta * gst_buffer_add_vanc_meta (GstBuffer * buffer,
                              
       gint did, gint dbn_sdid,
                              
       uint16_t * data, gsize size,
                              
       uint16_t checksum);
```

And that function links/runs prefectly when used in decklinkvideosrc.  It is only when adding a call to
```
const  GstMetaInfo *vanc_meta_get_info (void);
```

That I get that undefined symbol error.  I have been beating my head against this for a couple of days, so I hope a fresh pair of eyes will spot what I am doing wrong.

The relevant parts are:

gstvancmeta.h
```
#ifndef _GST_VANC_META_H_
#define _GST_VANC_META_H_

#ifdef __cplusplus
extern "C"
{
#endif

#include <gst/gst.h>
#include <stdint.h>


...

/* implementation */
const  GstMetaInfo *vanc_meta_get_info (void);
#define GST_VANC_META_INFO (vanc_meta_get_info ())

VANCMeta * gst_buffer_add_vanc_meta (GstBuffer * buffer,
                              
       gint did, gint dbn_sdid,
                              
       uint16_t * data, gsize size,
                              
       uint16_t checksum);

...
```

gstvancmeta.c
```
#include "gstvancmeta.h"
...

const GstMetaInfo
  *vanc_meta_get_info (void)
{
  static const GstMetaInfo *meta_info = NULL;

  if (g_once_init_enter (&meta_info)) {
    const GstMetaInfo *mi = gst_meta_register (VANC_META_API_TYPE,
                              
                 "VANCMeta",
                              
                 sizeof (VANCMeta),
                              
                 vanc_meta_init,
                              
                 vanc_meta_free,
                              
                 vanc_meta_transform);
    g_once_init_leave (&meta_info, mi);
  }
  return meta_info;
}

VANCMeta *
  gst_buffer_add_vanc_meta (GstBuffer * buffer,
                            gint did, gint dbn_sdid,
                            uint16_t * data, gsize size,
                            uint16_t checksum)
{
  VANCMeta *vmeta;

  g_return_val_if_fail (GST_IS_BUFFER (buffer), NULL);

  vmeta = (VANCMeta *) gst_buffer_add_meta (buffer,
                              
             GST_VANC_META_INFO, NULL);
...
  return vmeta;
}

```

And then I call them from code in gstdecklinkvideosrc.cpp, for example:
```
static void packetizeComponentAncillary(GstDecklinkVideoSrc *self,
                              
          std::vector<uint16_t> &data,
                              
          GstBuffer * buffer)
{
   const GstMetaInfo *vanc_info = vanc_meta_get_info ();
 ...
    if (usableVANC(did, dbn_sdid)) {
      gst_buffer_add_vanc_meta (buffer, did, dbn_sdid, &data[idx + 6],
                               data_count, chksum_e);
      GST_WARNING_OBJECT (self, "VANC meta added");
    }
  }
}

```

I only add the call to vanc_meta_get_info () there just to see if it would link, since it does not in gst-libav.  It does not either place.  In gstdecklink it is linking the .la file, and in gst-libav it is linking the .so file.

I will attach the full patch in case it helps.

Thank you,

John

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

gst-plugins-bad-vanc.patch (36K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: undefined symbol: vanc_meta_get_info

jpoet
I noticed this warning fly by:

gst-libs/gst/vanc/Makefile.am:17: warning: variable 'libgstvanc_@GST_API_VERSION@la_SOURCES' is defined but no program or
gst-libs/gst/vanc/Makefile.am:17: library has 'libgstvanc_@GST_API_VERSION@la' as canonical name (possible typo)

How does it know that?  Could that be part of my problem?

John

On Mon, Oct 10, 2016 at 4:46 PM John P Poet <[hidden email]> wrote:
I am writing a new meta lib, and have been battling trying to solve:

```
$ gst-inspect-1.0 decklinkvideosrc

(gst-plugin-scanner:10063): GStreamer-WARNING **: Failed to load plugin '/opt/gst/lib/gstreamer-1.0/
libgstdecklink.so': /opt/gst/lib/gstreamer-1.0/libgstdecklink.so: undefined symbol: vanc_meta_get_info
```

What is interesting about this, is that the exact same library/header/c file defines:
```
VANCMeta * gst_buffer_add_vanc_meta (GstBuffer * buffer,
                              
       gint did, gint dbn_sdid,
                              
       uint16_t * data, gsize size,
                              
       uint16_t checksum);
```

And that function links/runs prefectly when used in decklinkvideosrc.  It is only when adding a call to
```
const  GstMetaInfo *vanc_meta_get_info (void);
```

That I get that undefined symbol error.  I have been beating my head against this for a couple of days, so I hope a fresh pair of eyes will spot what I am doing wrong.

The relevant parts are:

gstvancmeta.h
```
#ifndef _GST_VANC_META_H_
#define _GST_VANC_META_H_

#ifdef __cplusplus
extern "C"
{
#endif

#include <gst/gst.h>
#include <stdint.h>


...

/* implementation */
const  GstMetaInfo *vanc_meta_get_info (void);
#define GST_VANC_META_INFO (vanc_meta_get_info ())

VANCMeta * gst_buffer_add_vanc_meta (GstBuffer * buffer,
                              
       gint did, gint dbn_sdid,
                              
       uint16_t * data, gsize size,
                              
       uint16_t checksum);

...
```

gstvancmeta.c
```
#include "gstvancmeta.h"
...

const GstMetaInfo
  *vanc_meta_get_info (void)
{
  static const GstMetaInfo *meta_info = NULL;

  if (g_once_init_enter (&meta_info)) {
    const GstMetaInfo *mi = gst_meta_register (VANC_META_API_TYPE,
                              
                 "VANCMeta",
                              
                 sizeof (VANCMeta),
                              
                 vanc_meta_init,
                              
                 vanc_meta_free,
                              
                 vanc_meta_transform);
    g_once_init_leave (&meta_info, mi);
  }
  return meta_info;
}

VANCMeta *
  gst_buffer_add_vanc_meta (GstBuffer * buffer,
                            gint did, gint dbn_sdid,
                            uint16_t * data, gsize size,
                            uint16_t checksum)
{
  VANCMeta *vmeta;

  g_return_val_if_fail (GST_IS_BUFFER (buffer), NULL);

  vmeta = (VANCMeta *) gst_buffer_add_meta (buffer,
                              
             GST_VANC_META_INFO, NULL);
...
  return vmeta;
}

```

And then I call them from code in gstdecklinkvideosrc.cpp, for example:
```
static void packetizeComponentAncillary(GstDecklinkVideoSrc *self,
                              
          std::vector<uint16_t> &data,
                              
          GstBuffer * buffer)
{
   const GstMetaInfo *vanc_info = vanc_meta_get_info ();
 ...
    if (usableVANC(did, dbn_sdid)) {
      gst_buffer_add_vanc_meta (buffer, did, dbn_sdid, &data[idx + 6],
                               data_count, chksum_e);
      GST_WARNING_OBJECT (self, "VANC meta added");
    }
  }
}

```

I only add the call to vanc_meta_get_info () there just to see if it would link, since it does not in gst-libav.  It does not either place.  In gstdecklink it is linking the .la file, and in gst-libav it is linking the .so file.

I will attach the full patch in case it helps.

Thank you,

John

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: undefined symbol: vanc_meta_get_info

Sebastian Dröge-3
On Tue, 2016-10-11 at 23:16 +0000, John P Poet wrote:
> I noticed this warning fly by:
>
> gst-libs/gst/vanc/Makefile.am:17: warning: variable 'libgstvanc_@GST_
> API_VERSION@la_SOURCES' is defined but no program or
> gst-libs/gst/vanc/Makefile.am:17: library has 'libgstvanc_@GST_API_VE
> RSION@la' as canonical name (possible typo)
>
> How does it know that?  Could that be part of my problem?

Most likely yes. Can you put all your changes up in a git repository
somewhere, e.g. on github? And maybe also file a bug in Bugzilla so we
can discuss inclusion of it and the API :)

--
Sebastian Dröge, Centricular Ltd · http://www.centricular.com
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

signature.asc (985 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: undefined symbol: vanc_meta_get_info

jpoet


On Thu, Oct 13, 2016 at 2:16 AM Sebastian Dröge <[hidden email]> wrote:
 Can you put all your changes up in a git repository

somewhere, e.g. on github? And maybe also file a bug in Bugzilla so we

can discuss inclusion of it and the API :)

I will work on creating a github repository with these changes.

A co-working noticed that LDFLAGS has "-export-symbols-regex "^_?(gst_|Gst|GST_).*"  and suggested that the problem could be that I was not prefixing my functions with gst_.  I made that change, but it didn't help,  No it says:

(gst-plugin-scanner:25893): GStreamer-WARNING **: Failed to load plugin '/opt/gst/lib/gstreamer-1.0/libgstlibav.so': /opt/gst/lib/gstreamer-1.0/libgstlibav.so: undefined symbol: gst_vanc_meta_get_info

John


_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: undefined symbol: vanc_meta_get_info

jpoet
On Thu, Oct 13, 2016 at 1:29 PM John P Poet <[hidden email]> wrote:
On Thu, Oct 13, 2016 at 2:16 AM Sebastian Dröge <[hidden email]> wrote:
 Can you put all your changes up in a git repository

somewhere, e.g. on github? And maybe also file a bug in Bugzilla so we

can discuss inclusion of it and the API :)

I will work on creating a github repository with these changes.

A co-working noticed that LDFLAGS has "-export-symbols-regex "^_?(gst_|Ghttps://<a href="http://github.com/jpoet/gst-libavst|GST_).*">github.com/jpoet/gst-libavst|GST_).*"  and suggested that the problem could be that I was not prefixing my functions with gst_.  I made that change, but it didn't help,  No it says:

(gst-plugin-scanner:25893): GStreamer-WARNING **: Failed to load plugin '/opt/gst/lib/gstreamer-1.0/libgstlibav.so': /opt/gst/lib/gstreamer-1.0/libgstlibav.so: undefined symbol: gst_vanc_meta_get_info

Hi Sebastian,

I was wondering if you have had any luck with
 https://github.com/jpoet/gst-plugins-bad/tree/VANC
I will be away for the next week or so, but am hopeful that you will figure out what I am doing wrong, while I am gone :-)

Thanks,

John


_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: undefined symbol: vanc_meta_get_info

Sebastian Dröge-3
On Wed, 2016-10-19 at 22:20 +0000, John P Poet wrote:

> On Thu, Oct 13, 2016 at 1:29 PM John P Poet <[hidden email]> wrote:
> > On Thu, Oct 13, 2016 at 2:16 AM Sebastian Dröge <sebastian@centricu
> > lar.com> wrote:
> > >  Can you put all your changes up in a git repository
> > >
> > > somewhere, e.g. on github? And maybe also file a bug in Bugzilla
> > > so we
> > >
> > > can discuss inclusion of it and the API :)
> >
> > I will work on creating a github repository with these changes.
> >
> > A co-working noticed that LDFLAGS has "-export-symbols-regex
> > "^_?(gst_|Ghttps://github.com/jpoet/gst-libavst|GST_).*"  and
> > suggested that the problem could be that I was not prefixing my
> > functions with gst_.  I made that change, but it didn't help,  No
> > it says:
> >
> > (gst-plugin-scanner:25893): GStreamer-WARNING **: Failed to load
> > plugin '/opt/gst/lib/gstreamer-1.0/libgstlibav.so':
> > /opt/gst/lib/gstreamer-1.0/libgstlibav.so: undefined symbol:
> > gst_vanc_meta_get_info
> >
>
> Hi Sebastian,
>
> I was wondering if you have had any luck with
>  https://github.com/jpoet/gst-plugins-bad/tree/VANC
> and
>  https://github.com/jpoet/gst-libav
>
> I will be away for the next week or so, but am hopeful that you will
> figure out what I am doing wrong, while I am gone :-)
It's still on my list, yes :)

--
Sebastian Dröge, Centricular Ltd · http://www.centricular.com
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

signature.asc (949 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: undefined symbol: vanc_meta_get_info

Sebastian Dröge-3
On Thu, 2016-10-20 at 07:27 +0300, Sebastian Dröge wrote:

> On Wed, 2016-10-19 at 22:20 +0000, John P Poet wrote:
> > On Thu, Oct 13, 2016 at 1:29 PM John P Poet <[hidden email]>
> > wrote:
> > > On Thu, Oct 13, 2016 at 2:16 AM Sebastian Dröge <sebastian@centri
> > > cu
> > > lar.com> wrote:
> > > >  Can you put all your changes up in a git repository
> > > >
> > > > somewhere, e.g. on github? And maybe also file a bug in
> > > > Bugzilla
> > > > so we
> > > >
> > > > can discuss inclusion of it and the API :)
> > >
> > > I will work on creating a github repository with these changes.
> > >
> > > A co-working noticed that LDFLAGS has "-export-symbols-regex
> > > "^_?(gst_|Ghttps://github.com/jpoet/gst-libavst|GST_).*"  and
> > > suggested that the problem could be that I was not prefixing my
> > > functions with gst_.  I made that change, but it didn't help,  No
> > > it says:
> > >
> > > (gst-plugin-scanner:25893): GStreamer-WARNING **: Failed to load
> > > plugin '/opt/gst/lib/gstreamer-1.0/libgstlibav.so':
> > > /opt/gst/lib/gstreamer-1.0/libgstlibav.so: undefined symbol:
> > > gst_vanc_meta_get_info
> > >
> >
> > Hi Sebastian,
> >
> > I was wondering if you have had any luck with
> >  https://github.com/jpoet/gst-plugins-bad/tree/VANC
> > and
> >  https://github.com/jpoet/gst-libav
> >
> > I will be away for the next week or so, but am hopeful that you
> > will
> > figure out what I am doing wrong, while I am gone :-)
>
> It's still on my list, yes :)
See the attached changes. That makes it compile for now, but there are
also various API related things that I would comment on.

Can you put your changes into Bugzilla for review and so we can include
them into GStreamer later? :)

--
Sebastian Dröge, Centricular Ltd · http://www.centricular.com
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

gst-libav.diff (2K) Download Attachment
gst-plugins-bad.diff (7K) Download Attachment
signature.asc (949 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: undefined symbol: vanc_meta_get_info

jpoet
On Mon, Oct 24, 2016 at 1:25 AM Sebastian Dröge <[hidden email]> wrote:
See the attached changes. That makes it compile for now, but there are
also various API related things that I would comment on.

Can you put your changes into Bugzilla for review and so we can include
them into GStreamer later? :)

--
Sebastian Dröge, Centricular Ltd · http://www.centricular.com

Thank you, Sebastian.  I have pushed those changes to the VANC branch and created https://bugzilla.gnome.org/show_bug.cgi?id=773863

Are you going to add your API comments to that ticket, or here?

John
 

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: undefined symbol: vanc_meta_get_info

rachelgomez161999
In reply to this post by jpoet
Based on the error message you provided, it seems that the symbol vanc_meta_get_info is undefined in your shared library libgstdecklink.so. This could be because the library was not linked with the appropriate object file or library containing the definition of that symbol.

One thing you could try is to make sure that the library containing the definition of vanc_meta_get_info is included in the linker command when building libgstdecklink.so. You can do this by adding the appropriate linker flags to your build system. For example, if you are using gcc to link your library, you can add the -l flag followed by the name of the library to link against. For instance, if the library containing the vanc_meta_get_info symbol is called libvancmeta.so, you could add the flag -lvancmeta to your linker command.

Alternatively, you could try adding the object file containing the vanc_meta_get_info symbol directly to the linker command when building libgstdecklink.so. For example, if the object file containing the symbol is called vancmeta.o, you could add it to the linker command with the -Wl,-whole-archive vancmeta.o -Wl,-no-whole-archive flags.

I hope this helps you resolve the issue.

Regards,
Rachel Gomez