foo.h
#ifndef foo_h__
#define foo_h__
extern void foo(void);
#endif
foo.c
#include <stdio.h>
#include "foo.h"
void foo(void)
{
puts("Hello, I'm a shared library");
}
编译使用
gcc -Wall -fPIC -c foo.c
gcc -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o
dyna.c
#include <stdio.h>
#include <unistd.h>
#include <dlfcn.h>
typedef void (*foo)(void);
int main(int argc, char* argv[])
{
void* lib;
foo df;
printf("argc: %d\n",argc);
if(argc < 2)
return printf("USAGE: %s lib-file\n", argv[0]);
lib = dlopen(argv[1], RTLD_NOW);
if(lib == NULL)
return printf("ERROR: Cannot load library\n");
df = dlsym(lib, "foo");
if(df)
{
df();
}
else
printf("ERROR: Invalid library\n");
dlclose(lib);
}
编译使用:
gcc -rdynamic -o dyna dyna.c -ldl
跑:
./dyna libfoo.so
argc: 2
ERROR: Cannot load library
我不明白我哪里错了......