you can see my repo, https://github.com/notedit/media-server-go/tree/master/wrapper
use c++ and go, I use swig to generate c++ binding for go av <aleksandar.valc...@gmail.com> 于2019年4月12日周五 上午1:09写道: > Works like charm. Thanks a lot. > > Here is my code: > > aptwrap.h > > #ifdef __cplusplus > extern "C" { > #endif > > void print(); > > > #ifdef __cplusplus > } > #endif > > > > aptwrap.cpp > > #include "aptwrap.h" > > #include <iostream> > #include <apt-pkg/cachefile.h> > #include <apt-pkg/pkgcache.h> > > #ifdef __cplusplus > extern "C" { > #endif > > void print() { > std::cout << "XXXX " << std::endl; > > pkgInitConfig(*_config); > pkgInitSystem(*_config, _system); > > pkgCacheFile cache_file; > pkgCache* cache = cache_file.GetPkgCache(); > > for (pkgCache::PkgIterator package = cache->PkgBegin(); > !package.end(); package++) { > std::cout << package.Name() << std::endl; > } > > } > > #ifdef __cplusplus > } > #endif > > main.go > > package main > > // #cgo CXXFLAGS: -I. > // #cgo CFLAGS: -I. > // #cgo LDFLAGS: -lapt-pkg > // #include "aptwrap.h" > import "C" > > func main() { > C.print() > } > > Thanks > > > On Thursday, April 11, 2019 at 7:51:42 PM UTC+3, Marcin Romaszewicz wrote: >> >> Wrap your C++ code in C. >> >> Create a header which is simply: >> >> cwrapper.h: >> void printSomething() >> >> Then you can have a cwrapper.cpp instead of your wrapper.hpp: >> #include <iostream> >> extern "C" { >> >> >> void printSomething() { >> printf("Hello World"); >> } >> } >> >> Your C++ code will produce a function named printSomething with C linkage >> semantics, and Go can call that without issue. By hiding <iostream> from >> CGO, you don't have it trying to find C++ headers. >> >> >> On Thu, Apr 11, 2019 at 8:49 AM <aleksand...@gmail.com> wrote: >> >>> Hi *, >>> >>> I have following C++ code: >>> >>> wrapper.hpp: >>> >>> #include <iostream> >>> >>> void printSomething() { >>> printf("Hello World"); >>> } >>> >>> And corresponding main.go: >>> >>> package main >>> >>> // #cgo CXXFLAGS: -I. >>> // #cgo CFLAGS: -I. >>> // #cgo LDFLAGS: >>> // #include "wrapper.hpp" >>> import "C" >>> >>> func main() { >>> C.print() >>> } >>> >>> Unfortunately the result of "go build ." is: >>> >>> # _/home/avalchev/Sources/apt >>> In file included from ./main.go:6:0: >>> ./wrapper.hpp:1:20: fatal error: iostream: No such file or directory >>> #include <iostream> >>> ^ >>> compilation terminated. >>> >>> >>> Basically I'm trying to create debian's libapt-pkg wrapper, but the only >>> workaround I tried (and it works) is to create static library, but this >>> reduces portability a lot. >>> >>> Is there any way to make this work ? >>> >>> >>> >>> >>> >>> -- >>> 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 golan...@googlegroups.com. >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- > 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. > For more options, visit https://groups.google.com/d/optout. > -- 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. For more options, visit https://groups.google.com/d/optout.