67 lines
933 B
C
67 lines
933 B
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <dlfcn.h>
|
|
|
|
#define LOAD_DLL(path) \
|
|
void *dll = dlopen(path, RTLD_LAZY); \
|
|
if (dll == NULL) \
|
|
epic_fail(); \
|
|
else \
|
|
printf("load OK!\n");
|
|
|
|
static void epic_fail()
|
|
{
|
|
printf("epic fail\n");
|
|
exit(1);
|
|
}
|
|
|
|
static void openDll()
|
|
{
|
|
LOAD_DLL("dll.dll");
|
|
|
|
void (*test)() = dlsym(dll, "test");
|
|
|
|
if (test == NULL)
|
|
epic_fail();
|
|
|
|
test();
|
|
|
|
dlclose(dll);
|
|
}
|
|
|
|
static void openDep()
|
|
{
|
|
LOAD_DLL("dllDep.dll");
|
|
|
|
void (*test2)() = dlsym(dll, "test2");
|
|
|
|
if (test2 == NULL)
|
|
epic_fail();
|
|
|
|
test2();
|
|
|
|
dlclose(dll);
|
|
}
|
|
|
|
static void open2Dep()
|
|
{
|
|
openDep();
|
|
openDep();
|
|
}
|
|
|
|
static void (*testsList[])() = {
|
|
openDll,
|
|
openDep,
|
|
open2Dep};
|
|
|
|
int main()
|
|
{
|
|
for (int i = 0; i < sizeof(testsList) / sizeof(testsList[0]); i++)
|
|
{
|
|
fprintf(stderr, "test %d\n", i);
|
|
testsList[i]();
|
|
}
|
|
|
|
printf("passed!");
|
|
}
|