How to link dynamic libraries with go

39 views Asked by At

I successfully compiled a gtk+2.0 executable file using the gcc command arm-linux-gnueabi-gcc-4.7 test.c -o hello_world_gui pkg-config gtk+-2.0 --cflags -L/usr/arm-linux-gnueabi/lib -L/src/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -lXrender -lXinerama -lXext -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lXdamage -lXfixes -latk-1.0 -lcairo -lpixman-1 -lpng16 -lxcb-shm -lxcb-render -lX11 -lxcb -lXau -lXdmcp -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lfontconfig -lfreetype -lz -lexpat -lgobject-2.0 -lffi -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lstdc++, but when I used the go command go build -ldflags="-extldflags=-L/usr/arm-linux-gnueabi/lib -extldflags=-L/src/lib -extldflags=gtk-x11-2.0 -extldflags=gdk-x11-2.0 -extldflags=Xrender -extldflags=Xinerama -extldflags=Xext -extldflags=gdk_pixbuf-2.0 -extldflags=pangocairo-1.0 -extldflags=Xdamage -extldflags=Xfixes -extldflags=atk-1.0 -extldflags=cairo -extldflags=pixman-1 -extldflags=png16 -extldflags=xcb-shm -extldflags=xcb-render -extldflags=X11 -extldflags=xcb -extldflags=Xau -extldflags=Xdmcp -extldflags=gio-2.0 -extldflags=pangoft2-1.0 -extldflags=pango-1.0 -extldflags=fontconfig -extldflags=freetype -extldflags=z -extldflags=expat -extldflags=gobject-2.0 -extldflags=ffi -extldflags=gmodule-2.0 -extldflags=gthread-2.0 -extldflags=glib-2.0 -extldflags=-lstdc++" main.go to compile, an error occurred:

# dsdou
/src/go/pkg/tool/linux_amd64/link: running arm-linux-gnueabi-gcc-4.7 failed: exit status 1
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lgtk-x11-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lgdk-x11-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -latk-1.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lgio-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lpangoft2-1.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lpangocairo-1.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lgdk_pixbuf-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lcairo
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lpango-1.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lfontconfig
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lgobject-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lglib-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lfreetype
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lgdk-x11-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lpangocairo-1.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lgdk_pixbuf-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lpango-1.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lcairo
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lgobject-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lgthread-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lglib-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lgdk_pixbuf-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lgobject-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lglib-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lgio-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lgobject-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lglib-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lgobject-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lglib-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lpango-1.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lgobject-2.0
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lglib-2.0
collect2: error: ld returned 1 exit status

I have tried these commands and all reported errors,I am certain that these files exist because the same gcc can be compiled。

go build -ldflags="-L/usr/arm-linux-gnueabi/lib -L/src/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -lXrender -lXinerama -lXext -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lXdamage -lXfixes -latk-1.0 -lcairo -lpixman-1 -lpng16 -lxcb-shm -lxcb-render -lX11 -lxcb -lXau -lXdmcp -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lfontconfig -lfreetype -lz -lexpat -lgobject-2.0 -lffi -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lstdc++" main.go

go build -ldflags="-extldflags=-L/usr/arm-linux-gnueabi/lib -extldflags=-L/src/lib -extldflags=-lgtk-x11-2.0 -extldflags=-lgdk-x11-2.0 -extldflags=-lXrender -extldflags=-lXinerama -extldflags=-lXext -extldflags=-lgdk_pixbuf-2.0 -extldflags=-lpangocairo-1.0 -extldflags=-lXdamage -extldflags=-lXfixes -extldflags=-latk-1.0 -extldflags=-lcairo -extldflags=-lpixman-1 -extldflags=-lpng16 -extldflags=-lxcb-shm -extldflags=-lxcb-render -extldflags=-lX11 -extldflags=-lxcb -extldflags=-lXau -extldflags=-lXdmcp -extldflags=-lgio-2.0 -extldflags=-lpangoft2-1.0 -extldflags=-lpango-1.0 -extldflags=-lfontconfig -extldflags=-lfreetype -extldflags=-lz -extldflags=-lexpat -extldflags=-lgobject-2.0 -extldflags=-lffi -extldflags=-lgmodule-2.0 -extldflags=-lgthread-2.0 -extldflags=-lglib-2.0 -extldflags=-lstdc++" main.go

go build -ldflags="-extldflags=-L/usr/arm-linux-gnueabi/lib -extldflags=-L/src/lib -extldflags=gtk-x11-2.0 -extldflags=gdk-x11-2.0 -extldflags=Xrender -extldflags=Xinerama -extldflags=Xext -extldflags=gdk_pixbuf-2.0 -extldflags=pangocairo-1.0 -extldflags=Xdamage -extldflags=Xfixes -extldflags=atk-1.0 -extldflags=cairo -extldflags=pixman-1 -extldflags=png16 -extldflags=xcb-shm -extldflags=xcb-render -extldflags=X11 -extldflags=xcb -extldflags=Xau -extldflags=Xdmcp -extldflags=gio-2.0 -extldflags=pangoft2-1.0 -extldflags=pango-1.0 -extldflags=fontconfig -extldflags=freetype -extldflags=z -extldflags=expat -extldflags=gobject-2.0 -extldflags=ffi -extldflags=gmodule-2.0 -extldflags=gthread-2.0 -extldflags=glib-2.0 -extldflags=-lstdc++" main.go

go build -ldflags "-extldflags" main.go

go build -ldflags="-extldflags=
  -L/usr/arm-linux-gnueabi/lib
  -L/src/lib
  -lgtk-x11-2.0
  -lgdk-x11-2.0
  -lXrender
  -lXinerama
  -lXext
  -lgdk_pixbuf-2.0
  -lpangocairo-1.0
  -lXdamage
  -lXfixes
  -latk-1.0
  -lcairo
  -lpixman-1
  -lpng16
  -lxcb-shm
  -lxcb-render
  -lX11
  -lxcb
  -lXau
  -lXdmcp
  -lgio-2.0
  -lpangoft2-1.0
  -lpango-1.0
  -lfontconfig
  -lfreetype
  -lz
  -lexpat
  -lgobject-2.0
  -lffi
  -lgmodule-2.0
  -lgthread-2.0
  -lglib-2.0
  -lstdc++" main.go

and add in main

package main

/*
#cgo CFLAGS:
#cgo LDFLAGS: -L/src/lib -L/usr/arm-linux-gnueabi/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -lXrender -lXinerama -lXext -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lXdamage -lXfixes -latk-1.0 -lcairo -lpixman-1 -lpng16 -lxcb-shm -lxcb-render -lX11 -lxcb -lXau -lXdmcp -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lfontconfig -lfreetype -lz -lexpat -lgobject-2.0 -lffi -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lstdc++
*/

import "C"
import "github.com/mattn/go-gtk/gtk"

func main() {
    window := gtk.NewWindow(gtk.WINDOW_TOPLEVEL)
    window.SetTitle("wow")
    button := gtk.NewButtonWithLabel("hello golang!")
    button.Clicked(func() {
        gtk.MainQuit()
    })
    window.Add(button)
}

I hope to successfully compile using go

0

There are 0 answers