#!/bin/sh# program## dlopen():# liba.so# <- libb.so# <- libb_dependency.so## Expected: Undefined symbol in liba.so resolves to symbol in# libb_dependency.so.. ./test_setup# create libb_dependency.socat > libb_dependency.c << EOIint c() { return 1; }EOI# buildcompile_lib -o libb_dependency.so libb_dependency.c# create libb.socat > libb.c << EOIint b() { return 1; }EOI# buildcompile_lib -o libb.so libb.c ./libb_dependency.so# create liba.socat > liba.c << EOIextern int c();int a() { return c(); }EOI# buildcompile_lib -o liba.so liba.c ./libb.so# create programcat > program.c << EOI#include <dlfcn.h>#include <stdio.h>#include <stdlib.h>intmain(){void* liba;int (*a)();liba = dlopen("./liba.so", RTLD_NOW | RTLD_GLOBAL);if (liba == NULL) {fprintf(stderr, "Error opening liba.so: %s\n", dlerror());exit(117);}a = (int (*)())dlsym(liba, "a");if (a == NULL) {fprintf(stderr, "Error getting symbol a: %s\n", dlerror());exit(116);}return a();}EOI# buildcompile_program_dl -o program program.c# runtest_run_ok ./program 1