1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
5 <title>Class shared_library</title>
6 <link rel="stylesheet" href="../../../../doc/src/boostbook.css" type="text/css">
7 <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
8 <link rel="home" href="../../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset">
9 <link rel="up" href="../../boost_dll/reference.html#header.boost.dll.shared_library_hpp" title="Header <boost/dll/shared_library.hpp>">
10 <link rel="prev" href="program_location.html" title="Function program_location">
11 <link rel="next" href="load_mode/type.html" title="Type type">
13 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
14 <table cellpadding="2" width="100%"><tr>
15 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../boost.png"></td>
16 <td align="center"><a href="../../../../index.html">Home</a></td>
17 <td align="center"><a href="../../../../libs/libraries.htm">Libraries</a></td>
18 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
19 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
20 <td align="center"><a href="../../../../more/index.htm">More</a></td>
23 <div class="spirit-nav">
24 <a accesskey="p" href="program_location.html"><img src="../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../boost_dll/reference.html#header.boost.dll.shared_library_hpp"><img src="../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="load_mode/type.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a>
26 <div class="refentry">
27 <a name="boost.dll.shared_library"></a><div class="titlepage"></div>
28 <div class="refnamediv">
29 <h2><span class="refentrytitle">Class shared_library</span></h2>
30 <p>boost::dll::shared_library — This class can be used to load a Dynamic link libraries (DLL's) or Shared Libraries, also know as dynamic shared objects (DSO's) and get their exported symbols (functions and variables). </p>
32 <h2 xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="refsynopsisdiv-title">Synopsis</h2>
33 <div xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="refsynopsisdiv"><pre class="synopsis"><span class="comment">// In header: <<a class="link" href="../../boost_dll/reference.html#header.boost.dll.shared_library_hpp" title="Header <boost/dll/shared_library.hpp>">boost/dll/shared_library.hpp</a>>
36 <span class="keyword">class</span> <a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">{</span>
37 <span class="keyword">public</span><span class="special">:</span>
38 <span class="comment">// types</span>
39 <span class="keyword">typedef</span> <span class="identifier">platform_specific</span> <a name="boost.dll.shared_library.native_handle_t"></a><span class="identifier">native_handle_t</span><span class="special">;</span>
41 <span class="comment">// <a class="link" href="shared_library.html#boost.dll.shared_libraryconstruct-copy-destruct">construct/copy/destruct</a></span>
42 <a class="link" href="shared_library.html#idm46262974659136-bb"><span class="identifier">shared_library</span></a><span class="special">(</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
43 <a class="link" href="shared_library.html#idm46262974656528-bb"><span class="identifier">shared_library</span></a><span class="special">(</span><span class="keyword">const</span> <a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span><span class="special">)</span><span class="special">;</span>
44 <a class="link" href="shared_library.html#idm46262974652320-bb"><span class="identifier">shared_library</span></a><span class="special">(</span><span class="keyword">const</span> <a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span><span class="special">)</span><span class="special">;</span>
45 <a class="link" href="shared_library.html#idm46262974646752-bb"><span class="identifier">shared_library</span></a><span class="special">(</span><a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&&</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
46 <span class="keyword">explicit</span> <a class="link" href="shared_library.html#idm46262974642688-bb"><span class="identifier">shared_library</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span><span class="special">,</span>
47 <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> <span class="special">=</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">default_mode</span><span class="special">)</span><span class="special">;</span>
48 <a class="link" href="shared_library.html#idm46262974637488-bb"><span class="identifier">shared_library</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span><span class="special">,</span>
49 <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> <span class="special">=</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">default_mode</span><span class="special">)</span><span class="special">;</span>
50 <a class="link" href="shared_library.html#idm46262974631216-bb"><span class="identifier">shared_library</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span><span class="special">,</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span><span class="special">,</span>
51 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span><span class="special">)</span><span class="special">;</span>
52 <a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span> <a class="link" href="shared_library.html#idm46262974628288-bb"><span class="keyword">operator</span><span class="special">=</span></a><span class="special">(</span><span class="keyword">const</span> <a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span><span class="special">)</span><span class="special">;</span>
53 <a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span> <a class="link" href="shared_library.html#idm46262974623904-bb"><span class="keyword">operator</span><span class="special">=</span></a><span class="special">(</span><a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&&</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
54 <a class="link" href="shared_library.html#idm46262974619232-bb"><span class="special">~</span><span class="identifier">shared_library</span></a><span class="special">(</span><span class="special">)</span><span class="special">;</span>
56 <span class="comment">// <a class="link" href="shared_library.html#idm46262974751328-bb">public member functions</a></span>
57 <a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span>
58 <a class="link" href="shared_library.html#idm46262974750768-bb"><span class="identifier">assign</span></a><span class="special">(</span><span class="keyword">const</span> <a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span><span class="special">)</span><span class="special">;</span>
59 <a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span> <a class="link" href="shared_library.html#idm46262974744816-bb"><span class="identifier">assign</span></a><span class="special">(</span><span class="keyword">const</span> <a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span><span class="special">)</span><span class="special">;</span>
60 <span class="keyword">void</span> <a class="link" href="shared_library.html#idm46262974740208-bb"><span class="identifier">load</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span><span class="special">,</span>
61 <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> <span class="special">=</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">default_mode</span><span class="special">)</span><span class="special">;</span>
62 <span class="keyword">void</span> <a class="link" href="shared_library.html#idm46262974734320-bb"><span class="identifier">load</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span><span class="special">,</span>
63 <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> <span class="special">=</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">default_mode</span><span class="special">)</span><span class="special">;</span>
64 <span class="keyword">void</span> <a class="link" href="shared_library.html#idm46262974727088-bb"><span class="identifier">load</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span><span class="special">,</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span><span class="special">,</span>
65 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span><span class="special">)</span><span class="special">;</span>
66 <span class="keyword">void</span> <a class="link" href="shared_library.html#idm46262974723600-bb"><span class="identifier">unload</span></a><span class="special">(</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
67 <span class="keyword">bool</span> <a class="link" href="shared_library.html#idm46262974720304-bb"><span class="identifier">is_loaded</span></a><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
68 <span class="keyword">bool</span> <a class="link" href="shared_library.html#idm46262974717168-bb"><span class="keyword">operator</span><span class="special">!</span></a><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
69 <span class="keyword">explicit</span> <a class="link" href="shared_library.html#idm46262974714032-bb"><span class="keyword">operator</span> <span class="keyword">bool</span></a><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
70 <span class="keyword">bool</span> <a class="link" href="shared_library.html#idm46262974710624-bb"><span class="identifier">has</span></a><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
71 <span class="keyword">bool</span> <a class="link" href="shared_library.html#idm46262974705936-bb"><span class="identifier">has</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
72 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> T<span class="special">></span>
73 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if_c</span><span class="special"><</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_member_pointer</span><span class="special"><</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">value</span><span class="special">||</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_reference</span><span class="special"><</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">type</span>
74 <a class="link" href="shared_library.html#idm46262974703584-bb"><span class="identifier">get</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
75 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> T<span class="special">></span>
76 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">disable_if_c</span><span class="special"><</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_member_pointer</span><span class="special"><</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">value</span><span class="special">||</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_reference</span><span class="special"><</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span> <span class="identifier">T</span> <span class="special">&</span> <span class="special">></span><span class="special">::</span><span class="identifier">type</span>
77 <a class="link" href="shared_library.html#idm46262974695488-bb"><span class="identifier">get</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
78 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> T<span class="special">></span>
79 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if_c</span><span class="special"><</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_member_pointer</span><span class="special"><</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">value</span><span class="special">||</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_reference</span><span class="special"><</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">type</span>
80 <a class="link" href="shared_library.html#idm46262974692208-bb"><span class="identifier">get</span></a><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
81 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> T<span class="special">></span>
82 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">disable_if_c</span><span class="special"><</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_member_pointer</span><span class="special"><</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">value</span><span class="special">||</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_reference</span><span class="special"><</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span> <span class="identifier">T</span> <span class="special">&</span> <span class="special">></span><span class="special">::</span><span class="identifier">type</span>
83 <a class="link" href="shared_library.html#idm46262974688928-bb"><span class="identifier">get</span></a><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
84 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> T<span class="special">></span> <span class="identifier">T</span> <span class="special">&</span> <a class="link" href="shared_library.html#idm46262974685648-bb"><span class="identifier">get_alias</span></a><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
85 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> T<span class="special">></span> <span class="identifier">T</span> <span class="special">&</span> <a class="link" href="shared_library.html#idm46262974679264-bb"><span class="identifier">get_alias</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
86 <span class="identifier">native_handle_t</span> <a class="link" href="shared_library.html#idm46262974676064-bb"><span class="identifier">native</span></a><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
87 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <a class="link" href="shared_library.html#idm46262974673616-bb"><span class="identifier">location</span></a><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
88 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <a class="link" href="shared_library.html#idm46262974669120-bb"><span class="identifier">location</span></a><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
89 <span class="keyword">void</span> <a class="link" href="shared_library.html#idm46262974663296-bb"><span class="identifier">swap</span></a><span class="special">(</span><a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
91 <span class="comment">// <a class="link" href="shared_library.html#idm46262974616928-bb">public static functions</a></span>
92 <span class="keyword">static</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <a class="link" href="shared_library.html#idm46262974616368-bb"><span class="identifier">suffix</span></a><span class="special">(</span><span class="special">)</span><span class="special">;</span>
93 <span class="keyword">static</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <a class="link" href="shared_library.html#idm46262974613824-bb"><span class="identifier">decorate</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span><span class="special">)</span><span class="special">;</span>
94 <span class="special">}</span><span class="special">;</span></pre></div>
95 <div class="refsect1">
96 <a name="id-1.3.15.8.2.6.4.4"></a><h2>Description</h2>
97 <p><a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> instances share reference count to an actual loaded DLL/DSO, so it is safe and memory efficient to have multiple instances of <a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> referencing the same DLL/DSO even if those instances were loaded using different paths (relative + absolute) referencing the same object.</p>
98 <p>On Linux/POSIX link with library "dl". "-fvisibility=hidden" flag is also recommended for use on Linux/POSIX. </p>
99 <div class="refsect2">
100 <a name="id-1.3.15.8.2.6.4.4.4"></a><h3>
101 <a name="boost.dll.shared_libraryconstruct-copy-destruct"></a><code class="computeroutput">shared_library</code>
103 construct/copy/destruct</h3>
104 <div class="orderedlist"><ol class="orderedlist" type="1">
105 <li class="listitem">
106 <pre class="literallayout"><a name="idm46262974659136-bb"></a><span class="identifier">shared_library</span><span class="special">(</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
107 <p>Creates in anstance that does not reference any DLL/DSO.</p>
111 <div class="variablelist"><table border="0" class="variablelist compact">
113 <col align="left" valign="top">
118 <td><p><span class="term">Postconditions:</span></p></td>
119 <td><p>this->is_loaded() returns false. </p></td>
122 <td><p><span class="term">Throws:</span></p></td>
128 <li class="listitem">
129 <pre class="literallayout"><a name="idm46262974656528-bb"></a><span class="identifier">shared_library</span><span class="special">(</span><span class="keyword">const</span> <a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span> lib<span class="special">)</span><span class="special">;</span></pre>
130 <p>Copy constructor that increments the reference count of an underlying shared library. Same as calling constructor with <code class="computeroutput">lib.location()</code> parameter.</p>
135 <div class="variablelist"><table border="0" class="variablelist compact">
137 <col align="left" valign="top">
142 <td><p><span class="term">Parameters:</span></p></td>
143 <td><div class="variablelist"><table border="0" class="variablelist compact">
145 <col align="left" valign="top">
149 <td><p><span class="term"><code class="computeroutput">lib</code></span></p></td>
150 <td><p>A library to copy. </p></td>
155 <td><p><span class="term">Postconditions:</span></p></td>
156 <td><p>lib == *this </p></td>
159 <td><p><span class="term">Throws:</span></p></td>
165 <li class="listitem">
166 <pre class="literallayout"><a name="idm46262974652320-bb"></a><span class="identifier">shared_library</span><span class="special">(</span><span class="keyword">const</span> <a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span> lib<span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span> ec<span class="special">)</span><span class="special">;</span></pre>
167 <p>Copy constructor that increments the reference count of an underlying shared library. Same as calling constructor with <code class="computeroutput">lib.location(), ec</code> parameters.</p>
172 <div class="variablelist"><table border="0" class="variablelist compact">
174 <col align="left" valign="top">
179 <td><p><span class="term">Parameters:</span></p></td>
180 <td><div class="variablelist"><table border="0" class="variablelist compact">
182 <col align="left" valign="top">
187 <td><p><span class="term"><code class="computeroutput">ec</code></span></p></td>
188 <td><p>Variable that will be set to the result of the operation. </p></td>
191 <td><p><span class="term"><code class="computeroutput">lib</code></span></p></td>
192 <td><p>A shared library to copy. </p></td>
198 <td><p><span class="term">Postconditions:</span></p></td>
199 <td><p>lib == *this </p></td>
202 <td><p><span class="term">Throws:</span></p></td>
203 <td>std::bad_alloc in case of insufficient memory. </td>
208 <li class="listitem">
209 <pre class="literallayout"><a name="idm46262974646752-bb"></a><span class="identifier">shared_library</span><span class="special">(</span><a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&&</span> lib<span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
210 <p>Move constructor. Does not invalidate existing symbols and functions loaded from lib.</p>
215 <div class="variablelist"><table border="0" class="variablelist compact">
217 <col align="left" valign="top">
222 <td><p><span class="term">Parameters:</span></p></td>
223 <td><div class="variablelist"><table border="0" class="variablelist compact">
225 <col align="left" valign="top">
229 <td><p><span class="term"><code class="computeroutput">lib</code></span></p></td>
230 <td><p>A shared library to move from. </p></td>
235 <td><p><span class="term">Postconditions:</span></p></td>
236 <td><p>lib.is_loaded() returns false, this->is_loaded() return true. </p></td>
239 <td><p><span class="term">Throws:</span></p></td>
245 <li class="listitem">
246 <pre class="literallayout"><span class="keyword">explicit</span> <a name="idm46262974642688-bb"></a><span class="identifier">shared_library</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span> lib_path<span class="special">,</span>
247 <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> mode <span class="special">=</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">default_mode</span><span class="special">)</span><span class="special">;</span></pre>
248 <p>Loads a library by specified path with a specified mode.</p>
252 <div class="variablelist"><table border="0" class="variablelist compact">
254 <col align="left" valign="top">
259 <td><p><span class="term">Parameters:</span></p></td>
260 <td><div class="variablelist"><table border="0" class="variablelist compact">
262 <col align="left" valign="top">
267 <td><p><span class="term"><code class="computeroutput">lib_path</code></span></p></td>
268 <td><p>Library file name. Can handle std::string, const char*, std::wstring, const wchar_t* or <a class="link" href="fs/path.html" title="Type definition path">boost::dll::fs::path</a>. </p></td>
271 <td><p><span class="term"><code class="computeroutput">mode</code></span></p></td>
272 <td><p>A mode that will be used on library load. </p></td>
278 <td><p><span class="term">Throws:</span></p></td>
284 <li class="listitem">
285 <pre class="literallayout"><a name="idm46262974637488-bb"></a><span class="identifier">shared_library</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span> lib_path<span class="special">,</span>
286 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span> ec<span class="special">,</span>
287 <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> mode <span class="special">=</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">default_mode</span><span class="special">)</span><span class="special">;</span></pre>
288 <p>Loads a library by specified path with a specified mode.</p>
292 <div class="variablelist"><table border="0" class="variablelist compact">
294 <col align="left" valign="top">
299 <td><p><span class="term">Parameters:</span></p></td>
300 <td><div class="variablelist"><table border="0" class="variablelist compact">
302 <col align="left" valign="top">
307 <td><p><span class="term"><code class="computeroutput">ec</code></span></p></td>
308 <td><p>Variable that will be set to the result of the operation. </p></td>
311 <td><p><span class="term"><code class="computeroutput">lib_path</code></span></p></td>
312 <td><p>Library file name. Can handle std::string, const char*, std::wstring, const wchar_t* or <a class="link" href="fs/path.html" title="Type definition path">boost::dll::fs::path</a>. </p></td>
315 <td><p><span class="term"><code class="computeroutput">mode</code></span></p></td>
316 <td><p>A mode that will be used on library load. </p></td>
322 <td><p><span class="term">Throws:</span></p></td>
323 <td>std::bad_alloc in case of insufficient memory. </td>
328 <li class="listitem">
329 <pre class="literallayout"><a name="idm46262974631216-bb"></a><span class="identifier">shared_library</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span> lib_path<span class="special">,</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> mode<span class="special">,</span>
330 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span> ec<span class="special">)</span><span class="special">;</span></pre>
331 <p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
333 <li class="listitem">
334 <pre class="literallayout"><a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span> <a name="idm46262974628288-bb"></a><span class="keyword">operator</span><span class="special">=</span><span class="special">(</span><span class="keyword">const</span> <a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span> lib<span class="special">)</span><span class="special">;</span></pre>
335 <p>Assignment operator. If this->is_loaded() then calls this->unload(). Does not invalidate existing symbols and functions loaded from lib.</p>
340 <div class="variablelist"><table border="0" class="variablelist compact">
342 <col align="left" valign="top">
347 <td><p><span class="term">Parameters:</span></p></td>
348 <td><div class="variablelist"><table border="0" class="variablelist compact">
350 <col align="left" valign="top">
354 <td><p><span class="term"><code class="computeroutput">lib</code></span></p></td>
355 <td><p>A shared library to assign from. </p></td>
360 <td><p><span class="term">Postconditions:</span></p></td>
361 <td><p>lib == *this </p></td>
364 <td><p><span class="term">Throws:</span></p></td>
370 <li class="listitem">
371 <pre class="literallayout"><a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span> <a name="idm46262974623904-bb"></a><span class="keyword">operator</span><span class="special">=</span><span class="special">(</span><a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&&</span> lib<span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
372 <p>Move assignment operator. If this->is_loaded() then calls this->unload(). Does not invalidate existing symbols and functions loaded from lib.</p>
377 <div class="variablelist"><table border="0" class="variablelist compact">
379 <col align="left" valign="top">
384 <td><p><span class="term">Parameters:</span></p></td>
385 <td><div class="variablelist"><table border="0" class="variablelist compact">
387 <col align="left" valign="top">
391 <td><p><span class="term"><code class="computeroutput">lib</code></span></p></td>
392 <td><p>A library to move from. </p></td>
397 <td><p><span class="term">Postconditions:</span></p></td>
398 <td><p>lib.is_loaded() returns false. </p></td>
401 <td><p><span class="term">Throws:</span></p></td>
407 <li class="listitem">
408 <pre class="literallayout"><a name="idm46262974619232-bb"></a><span class="special">~</span><span class="identifier">shared_library</span><span class="special">(</span><span class="special">)</span><span class="special">;</span></pre>
409 <p>Destroys the object by calling <code class="computeroutput">unload()</code>. If library was loaded multiple times by different instances, the actual DLL/DSO won't be unloaded until there is at least one instance that references the DLL/DSO.</p>
412 <div class="variablelist"><table border="0" class="variablelist compact">
414 <col align="left" valign="top">
418 <td><p><span class="term">Throws:</span></p></td>
425 <div class="refsect2">
426 <a name="id-1.3.15.8.2.6.4.4.5"></a><h3>
427 <a name="idm46262974751328-bb"></a><code class="computeroutput">shared_library</code> public member functions</h3>
428 <div class="orderedlist"><ol class="orderedlist" type="1">
429 <li class="listitem">
430 <pre class="literallayout"><a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span>
431 <a name="idm46262974750768-bb"></a><span class="identifier">assign</span><span class="special">(</span><span class="keyword">const</span> <a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span> lib<span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span> ec<span class="special">)</span><span class="special">;</span></pre>
432 <p>Makes *this share the same shared object as lib. If *this is loaded, then unloads it.</p>
437 <div class="variablelist"><table border="0" class="variablelist compact">
439 <col align="left" valign="top">
444 <td><p><span class="term">Parameters:</span></p></td>
445 <td><div class="variablelist"><table border="0" class="variablelist compact">
447 <col align="left" valign="top">
452 <td><p><span class="term"><code class="computeroutput">ec</code></span></p></td>
453 <td><p>Variable that will be set to the result of the operation. </p></td>
456 <td><p><span class="term"><code class="computeroutput">lib</code></span></p></td>
457 <td><p>A library to copy. </p></td>
463 <td><p><span class="term">Postconditions:</span></p></td>
464 <td><p>lib.location() == this->location(), lib == *this </p></td>
467 <td><p><span class="term">Throws:</span></p></td>
468 <td>std::bad_alloc in case of insufficient memory. </td>
473 <li class="listitem">
474 <pre class="literallayout"><a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span> <a name="idm46262974744816-bb"></a><span class="identifier">assign</span><span class="special">(</span><span class="keyword">const</span> <a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span> lib<span class="special">)</span><span class="special">;</span></pre>
475 <p>Makes *this share the same shared object as lib. If *this is loaded, then unloads it.</p>
480 <div class="variablelist"><table border="0" class="variablelist compact">
482 <col align="left" valign="top">
487 <td><p><span class="term">Parameters:</span></p></td>
488 <td><div class="variablelist"><table border="0" class="variablelist compact">
490 <col align="left" valign="top">
494 <td><p><span class="term"><code class="computeroutput">lib</code></span></p></td>
495 <td><p>A library instance to assign from. </p></td>
500 <td><p><span class="term">Postconditions:</span></p></td>
501 <td><p>lib.location() == this->location() </p></td>
504 <td><p><span class="term">Throws:</span></p></td>
510 <li class="listitem">
511 <pre class="literallayout"><span class="keyword">void</span> <a name="idm46262974740208-bb"></a><span class="identifier">load</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span> lib_path<span class="special">,</span>
512 <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> mode <span class="special">=</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">default_mode</span><span class="special">)</span><span class="special">;</span></pre>
513 <p>Loads a library by specified path with a specified mode.</p>
514 <p>Note that if some library is already loaded in this instance, load will call unload() and then load the new provided library.</p>
518 <div class="variablelist"><table border="0" class="variablelist compact">
520 <col align="left" valign="top">
525 <td><p><span class="term">Parameters:</span></p></td>
526 <td><div class="variablelist"><table border="0" class="variablelist compact">
528 <col align="left" valign="top">
533 <td><p><span class="term"><code class="computeroutput">lib_path</code></span></p></td>
534 <td><p>Library file name. Can handle std::string, const char*, std::wstring, const wchar_t* or <a class="link" href="fs/path.html" title="Type definition path">boost::dll::fs::path</a>. </p></td>
537 <td><p><span class="term"><code class="computeroutput">mode</code></span></p></td>
538 <td><p>A mode that will be used on library load. </p></td>
544 <td><p><span class="term">Throws:</span></p></td>
550 <li class="listitem">
551 <pre class="literallayout"><span class="keyword">void</span> <a name="idm46262974734320-bb"></a><span class="identifier">load</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span> lib_path<span class="special">,</span>
552 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span> ec<span class="special">,</span>
553 <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> mode <span class="special">=</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">default_mode</span><span class="special">)</span><span class="special">;</span></pre>
554 <p>Loads a library by specified path with a specified mode.</p>
555 <p>Note that if some library is already loaded in this instance, load will call unload() and then load the new provided library.</p>
559 <div class="variablelist"><table border="0" class="variablelist compact">
561 <col align="left" valign="top">
566 <td><p><span class="term">Parameters:</span></p></td>
567 <td><div class="variablelist"><table border="0" class="variablelist compact">
569 <col align="left" valign="top">
574 <td><p><span class="term"><code class="computeroutput">ec</code></span></p></td>
575 <td><p>Variable that will be set to the result of the operation. </p></td>
578 <td><p><span class="term"><code class="computeroutput">lib_path</code></span></p></td>
579 <td><p>Library file name. Can handle std::string, const char*, std::wstring, const wchar_t* or <a class="link" href="fs/path.html" title="Type definition path">boost::dll::fs::path</a>. </p></td>
582 <td><p><span class="term"><code class="computeroutput">mode</code></span></p></td>
583 <td><p>A mode that will be used on library load. </p></td>
589 <td><p><span class="term">Throws:</span></p></td>
590 <td>std::bad_alloc in case of insufficient memory. </td>
595 <li class="listitem">
596 <pre class="literallayout"><span class="keyword">void</span> <a name="idm46262974727088-bb"></a><span class="identifier">load</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span> lib_path<span class="special">,</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> mode<span class="special">,</span>
597 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span> ec<span class="special">)</span><span class="special">;</span></pre>
598 <p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
600 <li class="listitem">
601 <pre class="literallayout"><span class="keyword">void</span> <a name="idm46262974723600-bb"></a><span class="identifier">unload</span><span class="special">(</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
602 <p>Unloads a shared library. If library was loaded multiple times by different instances, the actual DLL/DSO won't be unloaded until there is at least one instance that references the DLL/DSO.</p>
606 <div class="variablelist"><table border="0" class="variablelist compact">
608 <col align="left" valign="top">
613 <td><p><span class="term">Postconditions:</span></p></td>
614 <td><p>this->is_loaded() returns false. </p></td>
617 <td><p><span class="term">Throws:</span></p></td>
623 <li class="listitem">
624 <pre class="literallayout"><span class="keyword">bool</span> <a name="idm46262974720304-bb"></a><span class="identifier">is_loaded</span><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
625 <p>Check if an library is loaded.</p>
629 <div class="variablelist"><table border="0" class="variablelist compact">
631 <col align="left" valign="top">
636 <td><p><span class="term">Returns:</span></p></td>
637 <td><p>true if a library has been loaded. </p></td>
640 <td><p><span class="term">Throws:</span></p></td>
646 <li class="listitem">
647 <pre class="literallayout"><span class="keyword">bool</span> <a name="idm46262974717168-bb"></a><span class="keyword">operator</span><span class="special">!</span><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
648 <p>Check if an library is not loaded.</p>
652 <div class="variablelist"><table border="0" class="variablelist compact">
654 <col align="left" valign="top">
659 <td><p><span class="term">Returns:</span></p></td>
660 <td><p>true if a library has not been loaded. </p></td>
663 <td><p><span class="term">Throws:</span></p></td>
669 <li class="listitem">
670 <pre class="literallayout"><span class="keyword">explicit</span> <a name="idm46262974714032-bb"></a><span class="keyword">operator</span> <span class="keyword">bool</span><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
671 <p>Check if an library is loaded.</p>
675 <div class="variablelist"><table border="0" class="variablelist compact">
677 <col align="left" valign="top">
682 <td><p><span class="term">Returns:</span></p></td>
683 <td><p>true if a library has been loaded. </p></td>
686 <td><p><span class="term">Throws:</span></p></td>
692 <li class="listitem">
693 <pre class="literallayout"><span class="keyword">bool</span> <a name="idm46262974710624-bb"></a><span class="identifier">has</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span> symbol_name<span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
694 <p>Search for a given symbol on loaded library. Works for all symbols, including alias names.</p>
699 <div class="variablelist"><table border="0" class="variablelist compact">
701 <col align="left" valign="top">
706 <td><p><span class="term">Parameters:</span></p></td>
707 <td><div class="variablelist"><table border="0" class="variablelist compact">
709 <col align="left" valign="top">
713 <td><p><span class="term"><code class="computeroutput">symbol_name</code></span></p></td>
714 <td><p>Null-terminated symbol name. Can handle std::string, char*, const char*. </p></td>
719 <td><p><span class="term">Returns:</span></p></td>
720 <td><p><code class="computeroutput">true</code> if the loaded library contains a symbol with a given name. </p></td>
723 <td><p><span class="term">Throws:</span></p></td>
729 <li class="listitem">
730 <pre class="literallayout"><span class="keyword">bool</span> <a name="idm46262974705936-bb"></a><span class="identifier">has</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span> symbol_name<span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
731 <p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
733 <li class="listitem">
734 <pre class="literallayout"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> T<span class="special">></span>
735 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if_c</span><span class="special"><</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_member_pointer</span><span class="special"><</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">value</span><span class="special">||</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_reference</span><span class="special"><</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">type</span>
736 <a name="idm46262974703584-bb"></a><span class="identifier">get</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span> symbol_name<span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
737 <p>Returns reference to the symbol (function or variable) with the given name from the loaded library. This call will always succeed and throw nothing if call to <code class="computeroutput">has(const char* )</code> member function with the same symbol name returned <code class="computeroutput">true</code>.</p>
738 <p><span class="bold"><strong>Example:</strong></span> </p>
739 <pre class="programlisting"><span class="keyword">int</span><span class="special">&</span> <span class="identifier">i0</span> <span class="special">=</span> <span class="identifier">lib</span><span class="special">.</span><span class="identifier">get</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span><span class="special">(</span><span class="string">"integer_name"</span><span class="special">)</span><span class="special">;</span>
740 <span class="keyword">int</span><span class="special">&</span> <span class="identifier">i1</span> <span class="special">=</span> <span class="special">*</span><span class="identifier">lib</span><span class="special">.</span><span class="identifier">get</span><span class="special"><</span><span class="keyword">int</span><span class="special">*</span><span class="special">></span><span class="special">(</span><span class="string">"integer_alias_name"</span><span class="special">)</span><span class="special">;</span>
747 <div class="variablelist"><table border="0" class="variablelist compact">
749 <col align="left" valign="top">
754 <td><p><span class="term">Parameters:</span></p></td>
755 <td><div class="variablelist"><table border="0" class="variablelist compact">
757 <col align="left" valign="top">
761 <td><p><span class="term"><code class="computeroutput">symbol_name</code></span></p></td>
762 <td><p>Null-terminated symbol name. Can handle std::string, char*, const char*. </p></td>
767 <td><p><span class="term">Template Parameters:</span></p></td>
768 <td><div class="variablelist"><table border="0" class="variablelist compact">
770 <col align="left" valign="top">
774 <td><p><span class="term"><code class="computeroutput">T</code></span></p></td>
775 <td><p>Type of the symbol that we are going to import. Must be explicitly specified. </p></td>
780 <td><p><span class="term">Returns:</span></p></td>
781 <td><p>Reference to the symbol. </p></td>
784 <td><p><span class="term">Throws:</span></p></td>
790 <li class="listitem">
791 <pre class="literallayout"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> T<span class="special">></span>
792 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">disable_if_c</span><span class="special"><</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_member_pointer</span><span class="special"><</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">value</span><span class="special">||</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_reference</span><span class="special"><</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span> <span class="identifier">T</span> <span class="special">&</span> <span class="special">></span><span class="special">::</span><span class="identifier">type</span>
793 <a name="idm46262974695488-bb"></a><span class="identifier">get</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span> symbol_name<span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
794 <p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
796 <li class="listitem">
797 <pre class="literallayout"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> T<span class="special">></span>
798 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if_c</span><span class="special"><</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_member_pointer</span><span class="special"><</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">value</span><span class="special">||</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_reference</span><span class="special"><</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">type</span>
799 <a name="idm46262974692208-bb"></a><span class="identifier">get</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span> symbol_name<span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
800 <p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
802 <li class="listitem">
803 <pre class="literallayout"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> T<span class="special">></span>
804 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">disable_if_c</span><span class="special"><</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_member_pointer</span><span class="special"><</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">value</span><span class="special">||</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_reference</span><span class="special"><</span> <span class="identifier">T</span> <span class="special">></span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span> <span class="identifier">T</span> <span class="special">&</span> <span class="special">></span><span class="special">::</span><span class="identifier">type</span>
805 <a name="idm46262974688928-bb"></a><span class="identifier">get</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span> symbol_name<span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
806 <p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
808 <li class="listitem">
809 <pre class="literallayout"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> T<span class="special">></span> <span class="identifier">T</span> <span class="special">&</span> <a name="idm46262974685648-bb"></a><span class="identifier">get_alias</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span> alias_name<span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
810 <p>Returns a symbol (function or variable) from a shared library by alias name of the symbol.</p>
811 <p><span class="bold"><strong>Example:</strong></span> </p>
812 <pre class="programlisting"><span class="keyword">int</span><span class="special">&</span> <span class="identifier">i</span> <span class="special">=</span> <span class="identifier">lib</span><span class="special">.</span><span class="identifier">get_alias</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span><span class="special">(</span><span class="string">"integer_alias_name"</span><span class="special">)</span><span class="special">;</span>
818 <div class="variablelist"><table border="0" class="variablelist compact">
820 <col align="left" valign="top">
825 <td><p><span class="term">Parameters:</span></p></td>
826 <td><div class="variablelist"><table border="0" class="variablelist compact">
828 <col align="left" valign="top">
832 <td><p><span class="term"><code class="computeroutput">alias_name</code></span></p></td>
833 <td><p>Null-terminated alias symbol name. Can handle std::string, char*, const char*. </p></td>
838 <td><p><span class="term">Template Parameters:</span></p></td>
839 <td><div class="variablelist"><table border="0" class="variablelist compact">
841 <col align="left" valign="top">
845 <td><p><span class="term"><code class="computeroutput">T</code></span></p></td>
846 <td><p>Type of the symbol that we are going to import. Must be explicitly specified.. </p></td>
851 <td><p><span class="term">Throws:</span></p></td>
857 <li class="listitem">
858 <pre class="literallayout"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> T<span class="special">></span> <span class="identifier">T</span> <span class="special">&</span> <a name="idm46262974679264-bb"></a><span class="identifier">get_alias</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span> alias_name<span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
859 <p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
861 <li class="listitem">
862 <pre class="literallayout"><span class="identifier">native_handle_t</span> <a name="idm46262974676064-bb"></a><span class="identifier">native</span><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
863 <p>Returns the native handler of the loaded library.</p>
866 <div class="variablelist"><table border="0" class="variablelist compact">
868 <col align="left" valign="top">
872 <td><p><span class="term">Returns:</span></p></td>
873 <td><p>Platform-specific handle. </p></td>
877 <li class="listitem">
878 <pre class="literallayout"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <a name="idm46262974673616-bb"></a><span class="identifier">location</span><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
879 <p>Returns full path and name of this shared object.</p>
880 <p><span class="bold"><strong>Example:</strong></span> </p>
881 <pre class="programlisting"><span class="identifier">shared_library</span> <span class="identifier">lib</span><span class="special">(</span><span class="string">"test_lib.dll"</span><span class="special">)</span><span class="special">;</span>
882 <span class="identifier">filesystem</span><span class="special">::</span><span class="identifier">path</span> <span class="identifier">full_path</span> <span class="special">=</span> <span class="identifier">lib</span><span class="special">.</span><span class="identifier">location</span><span class="special">(</span><span class="special">)</span><span class="special">;</span> <span class="comment">// C:\Windows\System32\test_lib.dll</span>
887 <div class="variablelist"><table border="0" class="variablelist compact">
889 <col align="left" valign="top">
894 <td><p><span class="term">Returns:</span></p></td>
895 <td><p>Full path to the shared library. </p></td>
898 <td><p><span class="term">Throws:</span></p></td>
904 <li class="listitem">
905 <pre class="literallayout"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <a name="idm46262974669120-bb"></a><span class="identifier">location</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span> ec<span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
906 <p>Returns full path and name of shared module.</p>
907 <p><span class="bold"><strong>Example:</strong></span> </p>
908 <pre class="programlisting"><span class="identifier">shared_library</span> <span class="identifier">lib</span><span class="special">(</span><span class="string">"test_lib.dll"</span><span class="special">)</span><span class="special">;</span>
909 <span class="identifier">filesystem</span><span class="special">::</span><span class="identifier">path</span> <span class="identifier">full_path</span> <span class="special">=</span> <span class="identifier">lib</span><span class="special">.</span><span class="identifier">location</span><span class="special">(</span><span class="special">)</span><span class="special">;</span> <span class="comment">// C:\Windows\System32\test_lib.dll</span>
915 <div class="variablelist"><table border="0" class="variablelist compact">
917 <col align="left" valign="top">
922 <td><p><span class="term">Parameters:</span></p></td>
923 <td><div class="variablelist"><table border="0" class="variablelist compact">
925 <col align="left" valign="top">
929 <td><p><span class="term"><code class="computeroutput">ec</code></span></p></td>
930 <td><p>Variable that will be set to the result of the operation. </p></td>
935 <td><p><span class="term">Returns:</span></p></td>
936 <td><p>Full path to the shared library. </p></td>
939 <td><p><span class="term">Throws:</span></p></td>
940 <td>std::bad_alloc. </td>
945 <li class="listitem">
946 <pre class="literallayout"><span class="keyword">void</span> <a name="idm46262974663296-bb"></a><span class="identifier">swap</span><span class="special">(</span><a class="link" href="shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span> rhs<span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
947 <p>Swaps two libraries. Does not invalidate existing symbols and functions loaded from libraries.</p>
951 <div class="variablelist"><table border="0" class="variablelist compact">
953 <col align="left" valign="top">
958 <td><p><span class="term">Parameters:</span></p></td>
959 <td><div class="variablelist"><table border="0" class="variablelist compact">
961 <col align="left" valign="top">
965 <td><p><span class="term"><code class="computeroutput">rhs</code></span></p></td>
966 <td><p>Library to swap with. </p></td>
971 <td><p><span class="term">Throws:</span></p></td>
979 <div class="refsect2">
980 <a name="id-1.3.15.8.2.6.4.4.6"></a><h3>
981 <a name="idm46262974616928-bb"></a><code class="computeroutput">shared_library</code> public static functions</h3>
982 <div class="orderedlist"><ol class="orderedlist" type="1">
983 <li class="listitem">
984 <pre class="literallayout"><span class="keyword">static</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <a name="idm46262974616368-bb"></a><span class="identifier">suffix</span><span class="special">(</span><span class="special">)</span><span class="special">;</span></pre>
985 <p>Returns suffix of shared module: in a call to load() or the constructor/load.</p>
988 <div class="variablelist"><table border="0" class="variablelist compact">
990 <col align="left" valign="top">
994 <td><p><span class="term">Returns:</span></p></td>
995 <td><p>The suffix od shared module: ".dll" (Windows), ".so" (Unix/Linux/BSD), ".dylib" (MacOS/IOS) </p></td>
999 <li class="listitem">
1000 <pre class="literallayout"><span class="keyword">static</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <a name="idm46262974613824-bb"></a><span class="identifier">decorate</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span> sl<span class="special">)</span><span class="special">;</span></pre>
1001 <p>Returns the decorated path to a shared module name, i.e. with needed prefix/suffix added.</p>
1002 <p><span class="bold"><strong>Recommendations:</strong></span> Use <code class="computeroutput">load</code> with <code class="computeroutput">load_mode::append_decorations</code> instead of constructing the decorated path via <code class="computeroutput">decorate()</code> and loading by it.</p>
1003 <p>For instance, for a path like "path/to/boost" it returns :</p>
1004 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1005 <li class="listitem"><p>path/to/libboost.so on posix platforms</p></li>
1006 <li class="listitem"><p>path/to/libboost.dylib on OSX</p></li>
1007 <li class="listitem"><p>path/to/boost.dll on Windows</p></li>
1011 <p>Method handles both relative and absolute paths.</p>
1012 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1013 <li class="listitem"><p>Windows note: <code class="computeroutput">decorate()</code> does not prepend "lib" to the decorated path. Use <code class="computeroutput">load</code> with <code class="computeroutput">load_mode::append_decorations</code> for MinGW compatibility purpose.</p></li>
1014 <li class="listitem"><p>Posix note: if the initial module name is already prepended with lib, only the suffix() is appended to the path</p></li>
1021 <div class="variablelist"><table border="0" class="variablelist compact">
1023 <col align="left" valign="top">
1028 <td><p><span class="term">Parameters:</span></p></td>
1029 <td><div class="variablelist"><table border="0" class="variablelist compact">
1031 <col align="left" valign="top">
1035 <td><p><span class="term"><code class="computeroutput">sl</code></span></p></td>
1036 <td><p>the module name and path to decorate - for instance : /usr/lib/boost</p></td>
1041 <td><p><span class="term">Returns:</span></p></td>
1042 <td><p>The decorated unportable path that may not exists in the filesystem or could be wrong due to platform specifics. </p></td>
1051 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
1052 <td align="left"></td>
1053 <td align="right"><div class="copyright-footer">Copyright © 2014 Renato Tegon Forti, Antony Polukhin<br>Copyright © 2015 Antony Polukhin<br>Copyright © 2016 Antony Polukhin, Klemens Morgenstern<br>Copyright © 2017-2019 Antony Polukhin<p>
1054 Distributed under the Boost Software License, Version 1.0. (See accompanying
1055 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
1060 <div class="spirit-nav">
1061 <a accesskey="p" href="program_location.html"><img src="../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../boost_dll/reference.html#header.boost.dll.shared_library_hpp"><img src="../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="load_mode/type.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a>