Hi, i am trying to implement a simple gstreamer application with nim, but I need some help: This is the C code
#include <stdio.h>
#include <gst/gst.h>
int main(int argc, char **argv)
{
const gchar *nano_str;
guint major, minor, micro, nano;
gst_init(&argc, &argv);
gst_version(&major, &minor, µ, &nano);
if (nano == 1) nano_str = "(CVS)";
else if (nano == 2) nano_str = "(Prerelease)";
else {nano_str = "";}
printf("this program is linked against GStreamer %d.%d.%d. $s\n",
major, minor, micro, nano_str);
return 0;
}
Applying c2nim and some modifications I arrive to:
import std/os
type
guint = uint32
gchar = char
proc gst_init(argc: ptr cint, argv: pointer) {.header:"gst/gst.h", importc:"gst_init"} # this was done by me I guess something is wrong here
proc gst_version(major, minor, micro, nano: ptr guint) {.header:"gst/gst.h", importc:"gst_version"} # this also
proc main*(argc: cint; argv: cstringArray): cint =
var nano_str: cstring
var
major: guint
minor: guint
micro: guint
nano: guint
gst_init(unsafeAddr(argc), unsafeAddr(argv))
gst_version(addr(major), addr(minor), addr(micro), addr(nano))
if nano == 1:
nano_str = "(CVS)"
elif nano == 2:
nano_str = "(Prerelease)"
else:
nano_str = ""
echo("this program is linked against GStreamer %d.%d.%d. $s\n", major, minor,
micro, nano_str)
return 0
if isMainmodule:
discard main(cast[cint](paramCount()), nil)
I added a nim.cfg for all compiler flags:
--passC="-pthread -I/usr/include/gstreamer-1.0"
--passC="-I/usr/include/x86_64-linux-gnu"
--passC="-I/usr/include/glib-2.0"
--passC="-I/usr/lib/x86_64-linux-gnu/glib-2.0/include"
--passC="-lgstreamer-1.0"
--passC="-lgobject-2.0"
--passC="-lglib-2.0"
The linker cannot find gst_init, what am I missing?
Hint: used config file '/home/user/.choosenim/toolchains/nim-1.6.10/config/nim.cfg' [Conf]
Hint: used config file '/home/user/.choosenim/toolchains/nim-1.6.10/config/config.nims' [Conf]
Hint: used config file '/home/user/projects/gstreamer/first/nim.cfg' [Conf]
......................................................................................
Hint: [Link]
/usr/bin/ld: /home/user/.cache/nim/first_d/@mfirst.nim.c.o: in function `main__first_12':
@mfirst.nim.c:(.text+0x194): undefined reference to `gst_init'
/usr/bin/ld: @mfirst.nim.c:(.text+0x1bf): undefined reference to `gst_version'
collect2: error: ld returned 1 exit status
Thanks for your help!