首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

初学者Linux C++高手

2012-02-26 
菜鸟求助Linux C++高手C/C++ code现在需要使用共享对象实现通过配置文件生成类对象的功能 , 写了一些代码

菜鸟求助Linux C++高手

C/C++ code
现在需要使用共享对象实现通过配置文件生成类对象的功能 , 写了一些代码大家看一下======================getstr.h=============================#ifndef __GET_STR_H__#define __GET_STR_H__class Obj{ public:  int b;  char *a;  Obj();  int c();}; #ifdef SHAREDtypedef bool (*GetStr)(char* str,int len);typedef Obj* (*GetObj)();#elseextern "C"{bool GetStr(char* str,int len);Obj* GetObj();}#endif#endif==================================================================================getstr.cpp=================================#include"string.h"#include"getstr.h"#include"stdio.h"Obj::Obj(){  a = new char[100];  b = 100;  printf("indl");}int Obj::c(){  a[0] = '!';  a[1] = 0; return 20;}extern "C" {  bool GetStr(char* str,int len)  {    if(len < 10)      return false;    else      strcpy(str,"1234567890");      return true;  }  Obj* GetObj()  {    return new Obj();  }}bool ReadStr(char* str,int len){    if(len < 10)        return false;      else        strcpy(str,"1234567890");        return true;}=============================================================================================================dy.cpp============================================#include"stdio.h"#include"dlfcn.h" /*share object interface file*/#define SOFILE "/home/jameschen/Documents/ShareObject/libMyShareObject.so.1.0"#define SHARED#include"getstr.h"int main(){  void *dp;  char *error;  GetStr getstr;  GetObj getobj;  puts("share object test");    dp = dlopen(SOFILE,RTLD_LAZY);    if(dp==NULL)    {      printf("\nerror: %s\n",dlerror());      return -1;    }  getstr = (GetStr)dlsym(dp,"GetStr");  getobj = (GetObj)dlsym(dp,"GetObj");  error = dlerror();  if(error)    {      printf("\nerror: %s\n",error);      return -1;    }    char test[11] = {0};    getstr(test,10);  Obj *obj =  getobj();  printf("obj.a is %s\n",obj->a);  printf("obj.b is %d\n",obj->b);    obj->c();     [color=#FF0000]这里报错了[/color]    printf("obj.a is %s\n",obj->a);  printf("obj.b is %d\n",obj->b);  printf("current string: %s \n",test);  dlclose(dp);  return 0;}



=============================Makefile==========================================
all: libMyShareObject.so.1.0 dy

CC = g++
INCLUDE = -I/usr/include

libMyShareObject.so.1.0: getstr.o
$(CC) -o libMyShareObject.so.1.0 getstr.o -shared

getstr.o: getstr.cpp getstr.h
$(CC) $(INCLUDE) -c getstr.cpp -shared

dy: dy.cpp getstr.h
$(CC) -I. -rdynamic -s -o dy dy.cpp -ldl
chmod +x dy
clean: 
rm *.o *~
remove:
rm dy libMyShareObject.so.1.0
















[解决办法]
export LD_LIBRARY_PATH了?

热点排行