TEST(dlfcn, dlopen_undefined_weak_func) { void* handle = dlopen("libtest_dlopen_weak_undefined_func.so", RTLD_NOW); ASSERT_TRUE(handle != nullptr) << dlerror(); int (*weak_func)(); weak_func = reinterpret_cast<int (*)()>(dlsym(handle, "use_weak_undefined_func")); ASSERT_TRUE(weak_func != nullptr) << dlerror(); EXPECT_EQ(6551, weak_func()); dlclose(handle); }
TEST(dlfcn, dlsym_weak_func) { dlerror(); void* handle = dlopen("libtest_dlsym_weak_func.so", RTLD_NOW); ASSERT_TRUE(handle != nullptr); int (*weak_func)(); weak_func = reinterpret_cast<int (*)()>(dlsym(handle, "weak_func")); ASSERT_TRUE(weak_func != nullptr) << "dlerror: " << dlerror(); EXPECT_EQ(42, weak_func()); dlclose(handle); }
int main(int argc, char **argv) { if (weak_func() != WEAK_REF) errx(1, "error calling weak reference"); if (func() != STRONG_REF) errx(1, "error calling strong reference"); return (0); }