I use following main.go call cpp lib so
<code>package main
/*
#cgo LDFLAGS: -L/home/roroco/Dropbox/cpp/cpp_lib/draft/go_call_cpp -lprogress
#include "progress_lib.h"
// Callback function to be called from C++
extern void progressCallback(int progress);
*/
import "C"
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
//export progressCallback
func progressCallback(progress C.int) {
fmt.Printf("Progress: %d%%n", progress)
if progress == 100 {
wg.Done()
}
}
func main() {
wg.Add(1)
go func() {
C.do_work(C.progress_callback(C.progressCallback))
}()
wg.Wait()
}
</code>
<code>package main
/*
#cgo LDFLAGS: -L/home/roroco/Dropbox/cpp/cpp_lib/draft/go_call_cpp -lprogress
#include "progress_lib.h"
// Callback function to be called from C++
extern void progressCallback(int progress);
*/
import "C"
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
//export progressCallback
func progressCallback(progress C.int) {
fmt.Printf("Progress: %d%%n", progress)
if progress == 100 {
wg.Done()
}
}
func main() {
wg.Add(1)
go func() {
C.do_work(C.progress_callback(C.progressCallback))
}()
wg.Wait()
}
</code>
package main
/*
#cgo LDFLAGS: -L/home/roroco/Dropbox/cpp/cpp_lib/draft/go_call_cpp -lprogress
#include "progress_lib.h"
// Callback function to be called from C++
extern void progressCallback(int progress);
*/
import "C"
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
//export progressCallback
func progressCallback(progress C.int) {
fmt.Printf("Progress: %d%%n", progress)
if progress == 100 {
wg.Done()
}
}
func main() {
wg.Add(1)
go func() {
C.do_work(C.progress_callback(C.progressCallback))
}()
wg.Wait()
}
when I first export LD_LIBRARY_PATH and then run code, the code work well
<code>~/Dropbox/cpp/cpp_lib/draft/go_call_cpp $ export LD_LIBRARY_PATH=/home/roroco/Dropbox/cpp/cpp_lib/draft/go_call_cpp:$LD_LIBRARY_PATH
~/Dropbox/cpp/cpp_lib/draft/go_call_cpp $ go run main.go
Progress: 0%
Progress: 10%
</code>
<code>~/Dropbox/cpp/cpp_lib/draft/go_call_cpp $ export LD_LIBRARY_PATH=/home/roroco/Dropbox/cpp/cpp_lib/draft/go_call_cpp:$LD_LIBRARY_PATH
~/Dropbox/cpp/cpp_lib/draft/go_call_cpp $ go run main.go
Progress: 0%
Progress: 10%
</code>
~/Dropbox/cpp/cpp_lib/draft/go_call_cpp $ export LD_LIBRARY_PATH=/home/roroco/Dropbox/cpp/cpp_lib/draft/go_call_cpp:$LD_LIBRARY_PATH
~/Dropbox/cpp/cpp_lib/draft/go_call_cpp $ go run main.go
Progress: 0%
Progress: 10%
when I run code directly, it raise err:
<code>~/Dropbox/cpp/cpp_lib/draft/go_call_cpp $ go run main.go
/tmp/go-build2581226776/b001/exe/main: error while loading shared libraries: libprogress.so: cannot open shared object file: No such file or directory
exit status 127
</code>
<code>~/Dropbox/cpp/cpp_lib/draft/go_call_cpp $ go run main.go
/tmp/go-build2581226776/b001/exe/main: error while loading shared libraries: libprogress.so: cannot open shared object file: No such file or directory
exit status 127
</code>
~/Dropbox/cpp/cpp_lib/draft/go_call_cpp $ go run main.go
/tmp/go-build2581226776/b001/exe/main: error while loading shared libraries: libprogress.so: cannot open shared object file: No such file or directory
exit status 127
I hope don’t export LD_LIBRARY_PATH in cli, but put export LD_LIBRARY_PATH in my main.go, how should I do?