64,646
社区成员
发帖
与我相关
我的任务
分享
//t1.cpp
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
#include "t2.hpp"
int main(int argc, char **argv)
{
printf("t1 | main() begin\n");
int iReturn = 0;
void *FunctionLib = NULL; /* Handle to shared lib file */
int (*Function)(void*); /* Pointer to loaded routine */
char *dlError = NULL; /* Pointer to error string */
printf("t1 | main() | will dlopen\n");
FunctionLib = dlopen("./t2.so", RTLD_LAZY);
dlError = dlerror();
if( dlError )
{
printf("t1 | main() | %s\n", dlError);
return 1;
}
printf("t1 | main() | will dlsym\n");
Function = (int(*)(void*)) dlsym( FunctionLib, "f1");
dlError = dlerror();
if( dlError )
{
printf("t1 | main() | %s\n", dlError);
return 1;
}
char ch1[] = "this is a test";
printf("t1 | main() | will call so function\n");
iReturn = (*Function)(ch1);
printf("t1 | main() | iReturn = %d\n", iReturn);
printf("t1 | main() | will close so\n");
iReturn = dlclose(FunctionLib);
printf("t1 | main() | iReturn = %d\n", iReturn);
dlError = dlerror();
if( iReturn )
{
printf("t1 | main() | %s\n", dlError);
return 1;
}
return 0;
}
//t2.hpp
int f1(char*);
//t2.cpp
#include <stdio.h>
/*
int main(char *ch1)
{
printf("t2 | main() begin\n");
printf("t2 | main() %s\n", ch1);
return 100;
}
*/
int f1(char *ch1)
{
printf("t2 | f1() begin\n");
printf("t2 | f1() %s\n", ch1);
return 200;
}
//makefile
CC = g++ -fPIC -m32 -Wall
CCS = g++ -shared -m32 -Wall
clean:
-rm *.o *.so t1
t1:
$(CC) -o t1 t1.cpp -ldl
t2:
$(CC) -c -o t2.o t2.cpp
t3:
$(CCS) -o t2.so t2.o
//编译过程
#make t1
#make t2
#make t3
//执行过程
# ./t1
t1 | main() begin
t1 | main() | will dlopen
t1 | main() | will dlsym
t1 | main() | ./t2.so: undefined symbol: f1