有偿 求 go 调用 c++

2024 年 2 月 26 日
 chengiri

不太会用 cgo ,能帮我正常调用的 bro ,请喝杯奶茶

package main

/*
#cgo CFLAGS: -I./include -x c++
#cgo LDFLAGS: -L./lib -lCameraSDK
#include <camera/camera.h>
#include <stdlib.h>
#include <camera/device_discovery.h>
#include <camera/photography_settings.h>
*/
import "C"

func main() {

}

device_discovery.h

#pragma once
#include <camera/ins_types.h>
#include <vector>


namespace ins_camera {
    /**
     * \class DeviceDiscovery
     * \brief a convenient class for discovery Insta360 camera devices. 
     */
    class CAMERASDK_API DeviceDiscovery {
    public:
        /**
         * \brief get a list of available devices. This method may establish a connection with
         *        detected cameras to get some basic information such as serial_number.
         * \return a list of DeviceDescriptor describing detected cameras. 
         *  Remember to call FreeDeviceDescriptors(std::vector<DeviceDescriptor> descs)
         *  on the returned list to avoid memory leak.
         */
        std::vector<DeviceDescriptor> GetAvailableDevices();
        /**
         * \brief free memory allocated for DeviceDescriptor
         */
        void FreeDeviceDescriptors(std::vector<DeviceDescriptor> descs);
    private:
        std::vector<DeviceDescriptor> GetAvailableUSBDevices();
        std::vector<DeviceDescriptor> GetAvailableWifiDevices();
    };
}

3610 次点击
所在节点    程序员
12 条回复
StocksAI
2024 年 2 月 26 日
ChatGPT 搞不定这个?
mightybruce
2024 年 2 月 26 日
你下面这个是 c++ 不是 C, 你要把 c++ 转成 C 的 接口, 才能调用

只有 C 的 bindings 是通用的

C 的代码,但要调用写好的 C++代码时,需要将 c++的类型配置为.lib 的静态库或是.dll 的动态库,然后通过 extern “c”调用
Linux 则是.so 的共享库
chai2010
2024 年 2 月 26 日
xxq2334
2024 年 2 月 26 日
@mightybruce 这个大佬说的对
0o0O0o0O0o
2024 年 2 月 26 日
正要发 chai2010 写的 CGO 部分,发现他本人已经发了
MIUIOS
2024 年 2 月 26 日
我之前鼓动了好久的 CGO ,鼓动了两三天, 最后放弃,跟 2L 一样,直接编译成 so 库,动态加载就行,交互也超级容易,无语死, 至于 1L 说的 GPT 搞不定, 它是真的搞不定
Jirajine
2024 年 2 月 26 日
cpp 不是 c ,没法直接用 cgo 。你需要自己封装 c ffi ,或者 swig 能生成 bindings https://www.swig.org/Doc4.0/Go.html
liberize
2024 年 2 月 27 日
写一些 C 接口包装一下 C++接口,注意用 extern "C" { } 把这些 C 接口包起来
dog82
2024 年 2 月 27 日
曲线救国,把 c++封装成 restful
hu8245
2024 年 2 月 27 日
你需要对 c++ 导出为 C 符号有点了解。你都 import "C" 了,cpp 的符号肯定不行啊。https://zhuanlan.zhihu.com/p/123269132
uiluck
2024 年 2 月 27 日
利用 rpc 、http 呗
tangtang369
2024 年 2 月 27 日
直接 socket 封装个通信接口就行 就是部署的时候多了一个软件 但是功能实现起来更快

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/1018518

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX