diff --git a/src/meson.build b/src/meson.build
index 2a0169a..ec981a5 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -43,6 +43,30 @@
   'stdplus/signal.cpp',
 ]
 
+has_dl = false
+if not get_option('dl').disabled()
+  dl_dep = meson.get_compiler('cpp').find_library('dl', required: false)
+  has_dl = meson.get_compiler('cpp').links('
+    #include <dlfcn.h>
+    int main() { dlopen("", 0); }
+  ', dependencies: dl_dep)
+endif
+if has_dl
+  stdplus_deps += [
+    dl_dep,
+  ]
+
+  stdplus_srcs += [
+    'stdplus/dl.cpp',
+  ]
+
+  install_headers(
+    'stdplus/dl.hpp',
+    subdir: 'stdplus')
+elif get_option('dl').enabled()
+  error('libdl support required')
+endif
+
 has_fd = false
 if not get_option('fd').disabled() and has_span
   has_fd = true
diff --git a/src/stdplus/dl.cpp b/src/stdplus/dl.cpp
new file mode 100644
index 0000000..659389c
--- /dev/null
+++ b/src/stdplus/dl.cpp
@@ -0,0 +1,45 @@
+#include <dlfcn.h>
+#include <fmt/format.h>
+
+#include <stdplus/dl.hpp>
+
+namespace stdplus
+{
+
+Dl::Dl(const char* file, DlOpenFlags flags) :
+    handle(open(file, static_cast<int>(flags)))
+{
+}
+
+struct link_map* Dl::linkMap()
+{
+    struct link_map* ret;
+    info(RTLD_DI_LINKMAP, &ret);
+    return ret;
+}
+
+void Dl::info(int request, void* info)
+{
+    if (::dlinfo(*handle, request, info) != 0)
+    {
+        throw std::runtime_error("dlinfo");
+    };
+}
+
+void* Dl::open(const char* file, int flags)
+{
+    void* ret = ::dlopen(file, flags);
+    if (ret == nullptr)
+    {
+        throw std::runtime_error(fmt::format(
+            "dlopen `{}`: {}", file ? file : "<nullptr>", dlerror()));
+    }
+    return ret;
+}
+
+void Dl::close(void*&& handle)
+{
+    ::dlclose(handle);
+}
+
+} // namespace stdplus
diff --git a/src/stdplus/dl.hpp b/src/stdplus/dl.hpp
new file mode 100644
index 0000000..0526391
--- /dev/null
+++ b/src/stdplus/dl.hpp
@@ -0,0 +1,55 @@
+#pragma once
+#include <dlfcn.h>
+#include <link.h>
+
+#include <stdplus/flags.hpp>
+#include <stdplus/handle/managed.hpp>
+
+namespace stdplus
+{
+
+enum class DlOpenType : int
+{
+    Lazy = RTLD_LAZY,
+    Now = RTLD_NOW,
+};
+
+enum class DlOpenFlag : int
+{
+    Global = RTLD_GLOBAL,
+    Local = RTLD_LOCAL,
+    NoDelete = RTLD_NODELETE,
+    NoLoad = RTLD_NOLOAD,
+    DeepBind = RTLD_DEEPBIND,
+};
+
+class DlOpenFlags : public stdplus::BitFlags<int, DlOpenFlag>
+{
+  public:
+    inline DlOpenFlags(DlOpenType type) :
+        BitFlags<int, DlOpenFlag>(static_cast<int>(type))
+    {
+    }
+
+    inline DlOpenFlags(BitFlags<int, DlOpenFlag> flags) :
+        BitFlags<int, DlOpenFlag>(flags)
+    {
+    }
+};
+
+class Dl
+{
+  public:
+    Dl(const char* filename, DlOpenFlags flags);
+
+    struct link_map* linkMap();
+
+  private:
+    void info(int request, void* info);
+
+    static void* open(const char* filename, int flags);
+    static void close(void*&& handle);
+    stdplus::Managed<void*>::Handle<close> handle;
+};
+
+} // namespace stdplus
