I'm building a module in go, it looks something like this:
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()
}
Then I have hello.go which is my main:
package main
import (
"helloworld/eos"
)
func main() {
eos.useMyCFunc()
}
The directory structure is as follows:
-helloworld/
|
- hello/
|
- hello.go
|
-eos/
|
- eos.go
|
- vendor/
|
- (all the required lib files)
These are the commands I run to build the program:
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 .
None of these return any kind of error.
However, when I run go run . from /hello, I get this 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
This file does exist, and is located at helloworld/eos/vendor/MyLibrary/1.14.2/Bin/Linux/libMY_SDK-Linux-Shipping.so, as specified in the LDFLAGS of eos.go.
Why can hello.go not find this file?
On top of what @rocka2q mentioned about CGo, useMyCFunc() needs to be capitalized for it to be accessible to outside of the eos package.