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()
}