'GoLang: main not finding shared library used by module
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?
Solution 1:[1]
On top of what @rocka2q mentioned about CGo, useMyCFunc() needs to be capitalized for it to be accessible to outside of the eos package.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Grehgous |
