|
|
//print.h
#ifdef SHARED
int (*PrintInt)(int i);
int (*PrintFloat)(float f);
#else
int (PrintInt)( int i);
int (PrintFloat)(float f);
#endif
//printfloat.c
#include "print.h"
#include "iostream.h"
int PrintFloat(float f)
{
cout<<"f:"<<f<<endl;
return 1;
}
//printint.c
#include "print.h"
#include "iostream.h"
int PrintInt(int i)
{
cout<<"i:"<<i<<endl;
return 1;
}
//makefile_so
OBJO= printint.o printfloat.o
TARGET= print.so
all : print.so
printint.o: print.h printint.c
g++ -c printint.o printint.c
printfloat.o: print.h printfloat.c
g++ -c printfloat.o printfloat.c
print.so: printint.o printfloat.o
g++ -shared -o $(TARGET) $(OBJO)
//使用上面的东西生成print.so
//useprintso.c
#define SHARED
#include "dlfcn.h"
#include "print.h"
//#include "iostream.h"
#include "stdio.h"
int main()
{
void *handle;
// int (*PrintInt)(int i);
// int (*PrintFloat)(float f);
handle=dlopen("./print.so", RTLD_LAZY);
if(handle == NULL)
{
//cout<<"open dll error:"<<dlerror()<<endl;
printf("open dll error %s \n", dlerror());
dlclose(handle);
exit(1);
}
PrintInt=dlsym(handle," rintInt");
if(PrintInt==NULL)
{
printf("get printint error %s \n", dlerror());
dlclose(handle);
exit(1);
}
PrintInt(10);
PrintFloat = dlsym(handle, " rintFloat");
if(PrintFloat==NULL)
{
printf("get PrintFloat error %s \n", dlerror());
dlclose(handle);
exit(1);
}
PrintFloat(10.1);
dlclose(handle);
}
//生成app.out
gcc -rdynamic -s -o app.out useprintso.c -ldl
//执行文件
./app.out
//提示错误:
./print.so undefine PrintInt
//然后我用命令
ldd app.out
发现app.out的依赖的动态库没有print.so
各位。。。我应该怎么处理呢?哪里出问题了呢?? |
|