I guess you switched things here. Shared libraries (.so) need to be available at engine. Static libraries (.a) are bagged into the binary.
-Bruno On Sun, Oct 15, 2023, 3:55 PM Jan <pfei...@gmail.com> wrote: > Thanks Tamas, this is useful information. > > One of my libraries is using a `.a` library -- as opposed to `.so`, which > is another level of complexity, since the library has to be available in > runtime, not only in compile time -- and I'm going to follow your > "incantation" suggestion. > > > On Sunday, October 15, 2023 at 7:55:55 AM UTC+2 Tamás Gulácsi wrote: > >> Neither I see a convenient way. >> BUT if you add a .go file into the directories where your precompiled >> libraries live, >> then "go get" will download them too (and only those dirs that have .go >> files in it). >> >> So your next mission is to prepare the right #cgo CFLAGS LDFLAGS >> incantations to use those libraries. >> >> Jan a következőt írta (2023. október 14., szombat, 8:37:48 UTC+2): >> >>> Thanks Tamás, I may not be understanding correctly, but after taking a >>> look at github.com/godror/godror, and the odpi subdirectory, >>> I see it is including all the `.c` files on the fly >>> <https://github.com/godror/godror/blob/main/odpi/embed/dpi.c>. >>> >>> A couple of reasons immediately come to mind, that make this not a >>> generically valid option: >>> >>> * ODPI library is all C code (see src >>> <https://github.com/godror/godror/tree/main/odpi/src>) so it works >>> including in Go: my dependencies are C++/Rust code, for which I write a >>> small C wrapper (or for Rust just `extern "C"`). Also architecture >>> dependent compilation is different in C++/C/Rust code ... >>> * The C++ libraries I'm including have sub-dependencies of themselves >>> (one of which is llvm). It uses Bazel to organize it, and to manually move >>> all the required C++ files to a directory would be years of work :) Plus >>> would require me to slave to maintain things in sync. >>> * The C++ libraries take hours to compile ... I don't want to impose >>> this to users of my libraries. >>> >>> I think the only way to work this out is distributing the pre-compiled >>> C++/Rust libraries, so the Go simply refer to them (and we get the fast >>> compilation times from Go). But then, how to best distribute them in an >>> automatic fashion, so that users don't need to one by one figure out how to >>> install them (and clean up them later if they are no longer using...) ? >>> >>> Or maybe there is another convenient way I'm not seeing ? >>> >>> >>> On Thursday, October 12, 2023 at 6:39:34 PM UTC+2 Tamás Gulácsi wrote: >>> >>>> Can't you build (make go build for you) those libraries? >>>> For example, see github.com/godror/godror just includes the sources of >>>> that third party library in an "odpi" subdir, and with >>>> ``` >>>> /* >>>> #cgo CFLAGS: -I./odpi/include -I./odpi/src -I./odpi/embed >>>> >>>> #include "dpi.c" >>>> >>>> */ >>>> import "C" >>>> ``` >>>> it is compiled automatically. >>>> >>>> >>>> Caveat: for "go get" to download a directory, it must include a sth.go >>>> file ("require.go" in the odpi/* subdirs). >>>> But it may work that your precompiled libs in a subdir, with a mock .go >>>> file gets downloaded. >>>> But how will it found by your lib/app ? >>>> >>>> Tamás >>>> >>>> >>>> Jan a következőt írta (2023. október 12., csütörtök, 8:14:41 UTC+2): >>>> >>>>> Thanks Richard. Indeed, as you pointed out the downside is the >>>>> bloating of the git repo, but it makes sense. >>>>> >>>>> But does the user have to manually clone the repository and move the >>>>> `.a` file to, let's say, /usr/local/lib, or does a simple `go get` >>>>> magically does everything ? >>>>> >>>>> >>>>> On Thursday, October 12, 2023 at 2:29:21 AM UTC+2 Richard Wilkes wrote: >>>>> >>>>>> It isn't a great solution, but I currently include the built library >>>>>> files and necessary headers in the git repo alongside the Go code. You >>>>>> can >>>>>> see an example here >>>>>> https://github.com/richardwilkes/unison/tree/main/internal/skia >>>>>> where I include the skia library I built for use in my UI framework, >>>>>> unison. >>>>>> >>>>>> The main downside of this is bloating the git repo with the binary .a >>>>>> and .dll files... but I've not found a better way to handle it. glfw, >>>>>> which >>>>>> unison also depends upon, does something very similar. >>>>>> >>>>>> - Rich >>>>>> >>>>>> On Wednesday, October 11, 2023 at 2:58:23 AM UTC-7 Jan wrote: >>>>>> >>>>>>> hi, >>>>>>> >>>>>>> I'm developing a couple of ML framework/libraries for Go that depend >>>>>>> on C/C++ code. Once C-libraries dependencies are installed, the CGO >>>>>>> integration work great. >>>>>>> >>>>>>> Now, for end-users that just want to use these Go libraries, having >>>>>>> to figure out how to manually build and install those C/C++/Rust >>>>>>> dependencies is a hassle -- sadly each one with a different type of >>>>>>> build >>>>>>> system. >>>>>>> >>>>>>> I offer pre-built `.tgz` files (for a limited set of architectures) >>>>>>> with the required `.h` and `.a/.so` files along the releases, which >>>>>>> facilitates. But it's still a hassle to install -- and no >>>>>>> auto-uninstall if >>>>>>> someone is no longer using the Go module. >>>>>>> >>>>>>> I was wondering if others have figured out how to handle this in a >>>>>>> nicer way. Is there a recommended way to distribute prebuilt CGO >>>>>>> dependencies ? >>>>>>> >>>>>>> I like how Python wheels (`.whl` files) solve the issue, by >>>>>>> including the pre-built libraries in a sub-directory of the python >>>>>>> library >>>>>>> installation. I was hoping there would be a similar way (maybe with a >>>>>>> separate tool) to integrate with `go.mod`. >>>>>>> >>>>>>> Any pointers, thoughts or suggestions are very appreciated. >>>>>>> >>>>>>> Thanks! >>>>>>> Jan >>>>>>> >>>>>>> ps: While searching I saw similar questions, but none that exactly >>>>>>> answered this aspect of distribution. Just in case, apologies if it's a >>>>>>> duplicate question. >>>>>>> >>>>>> -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/a00b3a7b-200d-44ce-8060-913d9ac3c6cen%40googlegroups.com > <https://groups.google.com/d/msgid/golang-nuts/a00b3a7b-200d-44ce-8060-913d9ac3c6cen%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAEd86Tz-QM7rcqFH1LWifkgkpWzD7oVi32V8SERhvunF_5tfUQ%40mail.gmail.com.