linux下开发so动态库

test.cpp

#include "test.h"


void Test::sayHello() {
    printf("hello, this method is in so.\n");
}

test.h

#ifndef JOHN_TEST_H
#define JOHN_TEST_H
#include <stdio.h>

class Test {
    public:
        void sayHello();
};

#endif

test_api.cpp

#include "test.h"
#include "test_api.h"

void api_sayHello() {
    Test test;
    test.sayHello();
}

test_api.h

#pragma once

#ifdef __cplusplus
extern "C" {
#endif

void api_sayHello();

#ifdef __cplusplus
}
#endif

build.sh

gcc -fpic -shared test.cpp test_api.cpp -o libtestapi.so

golang中调用so

main.go

package main

//#cgo LDFLAGS: -L. -ltestapi -lstdc++
//#cgo CFLAGS: -I../so-gcc
//#include "test_api.h"
import "C"

func test_api_sayHello() {
	C.api_sayHello()
}
posted @   jiftle  阅读(64)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
历史上的今天:
2022-02-25 网路代理技术
2017-02-25 OAuth2.0流程图
点击右上角即可分享
微信分享提示