main.cc
#include <iostream>
#include "kernel_registry.h"
int main()
{
auto handle = dynamicOpen();
auto res = KernelRegistry::GetInstance()->getReg();
std::cout << res[0] << std::endl;
std::cout<<"Hello, World!"<<std::endl;
return 0;
}
kernel.h
#include <vector>
#include <string>
using namespace std;
void *dynamicOpen();
class KernelRegistry {
public:
static KernelRegistry *GetInstance();
void RegKernel(const string &name);
vector<string> getReg();
private:
vector<string> names_;
};
class KernelRegistrar {
public:
KernelRegistrar(const string &name) {
KernelRegistry::GetInstance()->RegKernel(name);
}
};
kernel.cc
#include "kernel_registry.h"
#include <dlfcn.h>
KernelRegistry *KernelRegistry::GetInstance() {
static KernelRegistry instance;
return &instance;
}
void KernelRegistry::RegKernel(const string &name) {
names_.push_back(name);
}
vector<string> KernelRegistry::getReg() {
return names_;
}
void *dynamicOpen() {
auto handle = dlopen("/home/huawei/CLionProjects/untitled8/libnnie.so", RTLD_LAZY);
return handle;
}
nnie.cc
#include "kernel_registry.h"
static KernelRegistrar Zhaodezan("zhaodezan");
run.sh
gcc kernel_registry.cc -shared -fPIC -o libregistry.so -ldl
gcc nnie.cc libregistry.so -shared -fPIC -o libnnie.so
g++ main.cc -o main -L./ -lregistry -ldl
export LD_LIBRARY_PATH=./
./main