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 @ 2023-02-25 12:16  jiftle  阅读(62)  评论(0编辑  收藏  举报