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.

Reply via email to