Estoy construyendo un módulo en go, se parece a esto:
package eos /* #cgo LDFLAGS: -L${SRCDIR}/vendor/MyLibrary/1.14.2/Bin/Linux -lMY_SDK-Linux-Shipping #cgo CFLAGS: -I ${SRCDIR}/vendor/MyLibrary/1.14.2/Include #include "my_sdk.h"*/ import "C" func useMyCFunc() void { C.myCFunc() } Luego tengo hello.go que es mi principal:
package main import ( "helloworld/eos" ) func main() { eos.useMyCFunc() }La estructura del directorio es la siguiente:
-helloworld/ | - hello/ | - hello.go | -eos/ | - eos.go | - vendor/ | - (all the required lib files)Estos son los comandos que ejecuto para construir el programa:
cd eos go mod init helloworld/eos cd ../hello go mod init helloworld/hello go mod edit -replace helloworld/eos=../eos go mod tidy go build . Ninguno de estos devuelve ningún tipo de error. Sin embargo, cuando corro go run . de /hello , me sale este error:
/tmp/go-build2142984290/b001/exe/hello: error while loading shared libraries: libMY_SDK-Linux-Shipping.so: cannot open shared object file: No such file or directory Este archivo existe y se encuentra en helloworld/eos/vendor/MyLibrary/1.14.2/Bin/Linux/libMY_SDK-Linux-Shipping.so , como se especifica en LDFLAGS de eos.go
¿Por qué hello.go no puede encontrar este archivo?
Además de lo que mencionó @rocka2q sobre CGo, useMyCFunc() debe estar en mayúsculas para que sea accesible desde fuera del paquete eos .