I have project structure like this, a.pb.h it includes --> protobuf.h b.grpc.pb.h it include --> a.pb.h and grpcpp.h
A c++ wrapper with extern C which is x.cc and x.h which includes b.grpc.pb.h and grpcpp.h. The function inside extern C is char* helloWorld(const char*, const char*, const char*);
I have created .so of a.pb.o, b.grpc.pb.o and x.o as libcombined.so.
Creating so's as g++ -fpic -shared -o libcombined.so a.pb.o b.grpc.pb.o x.o
I am calling helloWorld from my main.c file which is:
#include <stdio.h>
#include <dlfcn.h>
int main(){
char* (*fn)(const char*,const char*,const char*);
void *handle = dlopen("path_to/libcombined.so",RTLD_NOW);
if(handle==NULL){
fprintf(stderr, "Error: %s\n", dlerror());
}
fn = (char* (*)(const char*,const char*,const char*))dlsym(handle, "helloWorld");
if (!fn) {
/* no such symbol */
fprintf(stderr, "Error: %s\n", dlerror());
dlclose(handle);
return 0;
}
char* msg = fn("asd","asdas","asdasd");
printf("%s",msg);
return 0;
}
Error after executing: ./a.out
Error: path_to/libcombined.so: undefined symbol: _ZN6google8protobuf2io20ZeroCopyOutputStream15WriteAliasedRawEPKvi
Error: ./a.out: undefined symbol: helloWorld
Segmentation fault (core dumped)
The first above error is from symbol from protobuf.h file.
Can someone please suggest what I am doing wrong while linking or is there something I am doing wrong in main.c file?
Aucun commentaire:
Enregistrer un commentaire