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 <javascript:>> > 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 <javascript:>. >> 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.