动态库和静态库的区别在哪里(静态库和动态库的概念)

动态库和静态库的区别在哪里(静态库和动态库的概念)nbsp 点击上方 机械电子工程技术 关注我们 在 Linux 系统编程中 动态库 Dynamic Library 也称为共享库 Shared Library 是一种在程序运行时才被加载的库 动态库可以被多个程序共享 节省内存和磁盘空间 并且可以更容易地更新库中的代码而不需要重新编译使用该库的所有程序 动态库通常以 so 为文件后缀 编译源文件为位置无关代码 Position

大家好,我是讯享网,很高兴认识大家。



 
点击上方“机械电子工程技术”关注我们




在Linux系统编程中,动态库(Dynamic Library)也称为共享库(Shared Library),是一种在程序运行时才被加载的库。动态库可以被多个程序共享,节省内存和磁盘空间,并且可以更容易地更新库中的代码而不需要重新编译使用该库的所有程序。动态库通常以.so为文件后缀。
编译源文件为位置无关代码(Position Independent Code, PIC):使用 -fPIC-fpic选项编译源文件,生成目标文件。
 
     
       
     
讯享网gcc -fPIC -c source_file.c

讯享网
-fPIC生成的代码可以被加载到内存中的任何位置,而 -fpic生成的代码在某些架构上可以更快地进行地址绑定,但可能不适用于所有平台。
创建动态库:使用 gcc-shared选项来指定生成动态库。
 
     
       
     
讯享网gcc -shared -o liblibrary_name.so object_file1.o object_file2.o
这里 -shared 选项告诉编译器生成一个动态库。
设置版本号:通常,动态库会有一个主版本号和次版本号。可以在库文件名中包含这些版本号。
 
     
       
     
讯享网gcc -shared -o liblibrary_name.so.1.0 object_file1.o object_file2.oln -s liblibrary_name.so.1.0 liblibrary_name.so.1ln -s liblibrary_name.so.1 liblibrary_name.so
这里, liblibrary_name.so.1.0 是带有具体版本号的库文件,而 liblibrary_name.so.1 liblibrary_name.so 是符号链接,分别指向主版本和库的当前版本。
编译时链接:在编译程序时,使用 -L选项指定动态库的路径,使用 -l选项指定要链接的库。
 
     
       
     
讯享网gcc program.c -L/path/to/library -llibrary_name -o program
编译器会使用库文件中的符号来解析程序中的符号引用。
设置运行时库路径:确保动态链接器能找到动态库。可以通过设置 LD_LIBRARY_PATH环境变量来指定库的搜索路径。
 
     
       
     
讯享网export LD_LIBRARY_PATH=/path/to/library:\(LD_LIBRARY_PATH</span></code></pre></section><section style="text-indent: 2em;"><span style="white-space: pre-wrap;letter-spacing: 0.578px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif;font-size: var(--articleFontsize);">或者,可以在系统级的库缓存中添加库的路径,使用</span><code style="white-space: pre-wrap;background-color: var(--color-brand-8);letter-spacing: 0.578px;color: var(--brand-main);font-size: var(--articleFontsize);box-sizing: inherit;overflow: auto;margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);word-break: break-word !important;">ldconfig</code><span style="white-space: pre-wrap;letter-spacing: 0.578px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif;font-size: var(--articleFontsize);">命令。</span><br /></section></div></pre><pre style="box-sizing: inherit;"><div style=" box-sizing: inherit; "><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="nginx"><code><span class="code-snippet_outer"><span class="code-snippet__attribute">sudo</span> ldconfig /path/to/library</span></code></pre></section><section style="text-indent: 2em;"><span style="white-space: pre-wrap;letter-spacing: 0.578px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif;font-size: var(--articleFontsize);box-sizing: inherit;font-weight: 700;">运行程序</span><span style="white-space: pre-wrap;letter-spacing: 0.578px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif;font-size: var(--articleFontsize);">:现在可以运行编译好的程序,动态链接器会在程序启动时加载所需的动态库。</span><br /></section></div></pre><ul class="list-paddingleft-1"><li><p>动态库在程序运行时被加载,因此可执行文件的大小比使用静态库时小。</p></li><li><p>动态库允许库的代码在内存中共享,这意味着所有使用同一动态库的程序都共享同一份代码,节省内存。</p></li><li><p>动态库的更新只需要替换库文件,不需要重新编译使用该库的程序。</p></li><li><p>动态库的使用增加了程序的依赖性,如果库文件被删除或移动,程序可能无法运行。</p></li><li><p>动态库的版本管理很重要,不兼容的库更新可能导致依赖它的程序崩溃。</p></li></ul><p><span style="font-size: 24px;"><strong>一个简单的例子:</strong></span></p><section style="text-indent: 2em;">假设我们有一个简单的数学库,它提供两个函数:add 和 multiply。</section><section style="box-sizing: inherit;line-height: 24px;overflow: visible;text-indent: 2em;white-space: pre-wrap !important;word-break: break-word !important;"><span style="box-sizing: inherit;font-weight: 700;">编写源代码</span>:首先,我们创建两个源文件 <code style="box-sizing: inherit;overflow: auto;text-align: justify;color: var(--brand-main);background-color: var(--color-brand-8);margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);word-break: break-word !important;">add.c</code> 和 <code style="box-sizing: inherit;overflow: auto;text-align: justify;color: var(--brand-main);background-color: var(--color-brand-8);margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);word-break: break-word !important;">multiply.c</code>。</section><p style="box-sizing: inherit;line-height: 24px;overflow: visible;white-space: pre-wrap !important;word-break: break-word !important;"><strong><code style="box-sizing: inherit;overflow: auto;text-align: justify;color: var(--brand-main);background-color: var(--color-brand-8);margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);word-break: break-word !important;">add.c</code>:</strong></p><pre style="box-sizing: inherit;"><div style=" box-sizing: inherit; "><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="cs"><code><span class="code-snippet_outer"><span class="code-snippet__function"><span class="code-snippet__keyword">int</span> <span class="code-snippet__title">add</span>(<span class="code-snippet__params"><span class="code-snippet__keyword">int</span> a, <span class="code-snippet__keyword">int</span> b</span>)</span> {</span></code><code><span class="code-snippet_outer"> <span class="code-snippet__keyword">return</span> a + b;</span></code><code><span class="code-snippet_outer">}</span></code></pre></section></div></pre><p style="box-sizing: inherit;line-height: 24px;overflow: visible;white-space: pre-wrap !important;word-break: break-word !important;"><strong><code style="box-sizing: inherit;overflow: auto;text-align: justify;color: var(--brand-main);background-color: var(--color-brand-8);margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);word-break: break-word !important;">multiply.c</code>:</strong></p><pre style="box-sizing: inherit;"><div style=" box-sizing: inherit; "><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="cs"><code><span class="code-snippet_outer"><span class="code-snippet__function"><span class="code-snippet__keyword">int</span> <span class="code-snippet__title">multiply</span>(<span class="code-snippet__params"><span class="code-snippet__keyword">int</span> a, <span class="code-snippet__keyword">int</span> b</span>)</span> {</span></code><code><span class="code-snippet_outer"> <span class="code-snippet__keyword">return</span> a * b;</span></code><code><span class="code-snippet_outer">}</span></code></pre></section><section style="text-indent: 2em;"><span style="white-space: pre-wrap;letter-spacing: 0.578px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif;font-size: var(--articleFontsize);box-sizing: inherit;font-weight: 700;">编译源文件为共享对象</span><span style="white-space: pre-wrap;letter-spacing: 0.578px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif;font-size: var(--articleFontsize);">:</span><span style="white-space: pre-wrap;letter-spacing: 0.578px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif;font-size: var(--articleFontsize);">使用 </span><code style="white-space: pre-wrap;background-color: var(--color-brand-8);letter-spacing: 0.578px;color: var(--brand-main);font-size: var(--articleFontsize);box-sizing: inherit;overflow: auto;margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);word-break: break-word !important;">gcc</code><span style="white-space: pre-wrap;letter-spacing: 0.578px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif;font-size: var(--articleFontsize);"> 编译这些源文件,并使用 </span><code style="white-space: pre-wrap;background-color: var(--color-brand-8);letter-spacing: 0.578px;color: var(--brand-main);font-size: var(--articleFontsize);box-sizing: inherit;overflow: auto;margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);word-break: break-word !important;">-shared</code><span style="white-space: pre-wrap;letter-spacing: 0.578px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif;font-size: var(--articleFontsize);"> 选项生成共享对象(动态库)。</span></section></div></pre><pre style="box-sizing: inherit;"><div style=" box-sizing: inherit; "><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="css"><code><span class="code-snippet_outer"><span class="code-snippet__selector-tag">gcc</span> <span class="code-snippet__selector-tag">-fPIC</span> <span class="code-snippet__selector-tag">-shared</span> <span class="code-snippet__selector-tag">-o</span> <span class="code-snippet__selector-tag">libmath</span><span class="code-snippet__selector-class">.so</span> <span class="code-snippet__selector-tag">add</span><span class="code-snippet__selector-class">.c</span> <span class="code-snippet__selector-tag">multiply</span><span class="code-snippet__selector-class">.c</span></span></code></pre></section><section style="text-indent: 2em;"><span style="white-space: pre-wrap;letter-spacing: 0.578px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif;font-size: var(--articleFontsize);">这里,</span><code style="white-space: pre-wrap;background-color: var(--color-brand-8);letter-spacing: 0.578px;color: var(--brand-main);font-size: var(--articleFontsize);box-sizing: inherit;overflow: auto;margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);word-break: break-word !important;">-fPIC</code><span style="white-space: pre-wrap;letter-spacing: 0.578px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif;font-size: var(--articleFontsize);"> 生成位置无关代码,</span><code style="white-space: pre-wrap;background-color: var(--color-brand-8);letter-spacing: 0.578px;color: var(--brand-main);font-size: var(--articleFontsize);box-sizing: inherit;overflow: auto;margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);word-break: break-word !important;">-shared</code><span style="white-space: pre-wrap;letter-spacing: 0.578px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif;font-size: var(--articleFontsize);"> 指定生成动态库,</span><code style="white-space: pre-wrap;background-color: var(--color-brand-8);letter-spacing: 0.578px;color: var(--brand-main);font-size: var(--articleFontsize);box-sizing: inherit;overflow: auto;margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);word-break: break-word !important;">libmath.so</code><span style="white-space: pre-wrap;letter-spacing: 0.578px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif;font-size: var(--articleFontsize);"> 是我们创建的动态库的名称。</span><br /></section></div></pre><section style="box-sizing: inherit;line-height: 24px;overflow: visible;text-indent: 2em;white-space: pre-wrap !important;word-break: break-word !important;"><span style="box-sizing: inherit;font-weight: 700;">设置版本号(可选)</span>:为了更好地管理动态库的版本,我们可以设置版本号。</section><pre style="box-sizing: inherit;"><div style=" box-sizing: inherit; "><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li></ul><pre class="code-snippet__js" data-lang="css"><code><span class="code-snippet_outer"><span class="code-snippet__selector-tag">mv</span> <span class="code-snippet__selector-tag">libmath</span><span class="code-snippet__selector-class">.so</span> <span class="code-snippet__selector-tag">libmath</span><span class="code-snippet__selector-class">.so</span><span class="code-snippet__selector-class">.1</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__selector-tag">ln</span> <span class="code-snippet__selector-tag">-s</span> <span class="code-snippet__selector-tag">libmath</span><span class="code-snippet__selector-class">.so</span><span class="code-snippet__selector-class">.1</span> <span class="code-snippet__selector-tag">libmath</span><span class="code-snippet__selector-class">.so</span></span></code></pre></section><section style="text-indent: 2em;"><span style="white-space: pre-wrap;letter-spacing: 0.578px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif;font-size: var(--articleFontsize);">这里,</span><code style="white-space: pre-wrap;background-color: var(--color-brand-8);letter-spacing: 0.578px;color: var(--brand-main);font-size: var(--articleFontsize);box-sizing: inherit;overflow: auto;margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);word-break: break-word !important;">libmath.so.1</code><span style="white-space: pre-wrap;letter-spacing: 0.578px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif;font-size: var(--articleFontsize);"> 是带有具体版本号的库文件,而 </span><code style="white-space: pre-wrap;background-color: var(--color-brand-8);letter-spacing: 0.578px;color: var(--brand-main);font-size: var(--articleFontsize);box-sizing: inherit;overflow: auto;margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);word-break: break-word !important;">libmath.so</code><span style="white-space: pre-wrap;letter-spacing: 0.578px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif;font-size: var(--articleFontsize);"> 是一个符号链接,指向当前版本。</span><br /></section></div></pre><section style="text-indent: 2em;">现在,我们创建一个程序 main.c,它使用我们的数学库。</section><section style="box-sizing: inherit;line-height: 24px;overflow: visible;text-indent: 2em;white-space: pre-wrap !important;word-break: break-word !important;"><span style="box-sizing: inherit;font-weight: 700;">编写使用库的程序</span>:<code style="box-sizing: inherit;overflow: auto;text-align: justify;color: var(--brand-main);background-color: var(--color-brand-8);margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);word-break: break-word !important;">main.c</code> 使用 <code style="box-sizing: inherit;overflow: auto;text-align: justify;color: var(--brand-main);background-color: var(--color-brand-8);margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);word-break: break-word !important;">add</code> 和 <code style="box-sizing: inherit;overflow: auto;text-align: justify;color: var(--brand-main);background-color: var(--color-brand-8);margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);word-break: break-word !important;">multiply</code> 函数。</section><p style="box-sizing: inherit;line-height: 24px;overflow: visible;white-space: pre-wrap !important;word-break: break-word !important;"><strong><code style="box-sizing: inherit;overflow: auto;text-align: justify;color: var(--brand-main);background-color: var(--color-brand-8);margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);word-break: break-word !important;">main.c</code>:</strong></p><pre style="box-sizing: inherit;"><div style=" box-sizing: inherit; "><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="cpp"><code><span class="code-snippet_outer"><span class="code-snippet__meta">#<span class="code-snippet__meta-keyword">include</span> <span class="code-snippet__meta-string">&lt;stdio.h&gt;</span></span></span></code><code><span class="code-snippet_outer"><br /></span></code><code><span class="code-snippet_outer"><span class="code-snippet__function"><span class="code-snippet__keyword">extern</span> <span class="code-snippet__keyword">int</span> <span class="code-snippet__title">add</span><span class="code-snippet__params">(<span class="code-snippet__keyword">int</span>, <span class="code-snippet__keyword">int</span>)</span></span>;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__function"><span class="code-snippet__keyword">extern</span> <span class="code-snippet__keyword">int</span> <span class="code-snippet__title">multiply</span><span class="code-snippet__params">(<span class="code-snippet__keyword">int</span>, <span class="code-snippet__keyword">int</span>)</span></span>;</span></code><code><span class="code-snippet_outer"><br /></span></code><code><span class="code-snippet_outer"><span class="code-snippet__function"><span class="code-snippet__keyword">int</span> <span class="code-snippet__title">main</span><span class="code-snippet__params">()</span> </span>{</span></code><code><span class="code-snippet_outer"> <span class="code-snippet__keyword">int</span> sum = add(<span class="code-snippet__number">3</span>, <span class="code-snippet__number">4</span>);</span></code><code><span class="code-snippet_outer"> <span class="code-snippet__keyword">int</span> product = multiply(<span class="code-snippet__number">3</span>, <span class="code-snippet__number">4</span>);</span></code><code><span class="code-snippet_outer"><br /></span></code><code><span class="code-snippet_outer"> <span class="code-snippet__built_in">printf</span>(<span class="code-snippet__string">"Sum: %d\n"</span>, sum);</span></code><code><span class="code-snippet_outer"> <span class="code-snippet__built_in">printf</span>(<span class="code-snippet__string">"Product: %d\n"</span>, product);</span></code><code><span class="code-snippet_outer"><br /></span></code><code><span class="code-snippet_outer"> <span class="code-snippet__keyword">return</span> <span class="code-snippet__number">0</span>;</span></code><code><span class="code-snippet_outer">}</span></code></pre></section></div></pre><section style="box-sizing: inherit;line-height: 24px;overflow: visible;text-indent: 2em;white-space: pre-wrap !important;word-break: break-word !important;"><span style="box-sizing: inherit;font-weight: 700;">编译程序</span>:在编译 <code style="box-sizing: inherit;overflow: auto;text-align: justify;color: var(--brand-main);background-color: var(--color-brand-8);margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);word-break: break-word !important;">main.c</code> 时,我们需要指定动态库的路径和库名。但是,由于动态库在运行时才被加载,编译时只需要声明外部函数。</section><pre style="box-sizing: inherit;"><div style=" box-sizing: inherit; "><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="css"><code><span class="code-snippet_outer"><span class="code-snippet__selector-tag">gcc</span> <span class="code-snippet__selector-tag">main</span><span class="code-snippet__selector-class">.c</span> <span class="code-snippet__selector-tag">-o</span> <span class="code-snippet__selector-tag">program</span> <span class="code-snippet__selector-tag">-L</span>. <span class="code-snippet__selector-tag">-lmath</span></span></code></pre></section></div></pre><ol style="box-sizing: inherit;padding-inline-start: 2em;margin-top: 0.859em;font-size: 14px;color: rgb(6, 6, 7);font-family: -apple-system, blinkmacsystemfont, &quot;Helvetica Neue&quot;, helvetica, &quot;segoe ui&quot;, arial, roboto, &quot;PingFang SC&quot;, miui, &quot;Hiragino Sans GB&quot;, &quot;Microsoft Yahei&quot;, sans-serif;letter-spacing: 0.5px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-1"><ul style="box-sizing: inherit;padding-inline-start: 2em;margin-top: 0.859em;margin-bottom: 0.859em;padding-left: 1.25em;" class="list-paddingleft-1"><li style="box-sizing: inherit;line-height: 24px;"><p><code style="box-sizing: inherit;overflow: auto;text-align: justify;color: var(--brand-main);background-color: var(--color-brand-8);margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);white-space: pre-wrap !important;word-break: break-word !important;">-L.</code>&nbsp;指定了动态库的搜索路径(当前目录)。</p></li><li style="box-sizing: inherit;line-height: 24px;"><p><code style="box-sizing: inherit;overflow: auto;text-align: justify;color: var(--brand-main);background-color: var(--color-brand-8);margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);white-space: pre-wrap !important;word-break: break-word !important;">-lmath</code>&nbsp;指定了要链接的库,链接器会查找&nbsp;<code style="box-sizing: inherit;overflow: auto;text-align: justify;color: var(--brand-main);background-color: var(--color-brand-8);margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);white-space: pre-wrap !important;word-break: break-word !important;">libmath.so</code>&nbsp;或&nbsp;<code style="box-sizing: inherit;overflow: auto;text-align: justify;color: var(--brand-main);background-color: var(--color-brand-8);margin: 0 var(--gap-xs);padding: var(--gap-xs) var(--gap-sm);border-radius: var(--border-radius-xs);white-space: pre-wrap !important;word-break: break-word !important;">libmath.so.1</code>。</p></li></ul></ol><p style="text-indent: 2em;"><strong>设置运行时库路径:</strong>在运行程序之前,确保动态链接器能找到动态库。可以通过设置 LD_LIBRARY_PATH 环境变量来指定库的搜索路径。</p><pre style="box-sizing: inherit;"><div style=" box-sizing: inherit; "><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="bash"><code><span class="code-snippet_outer"><span class="code-snippet__built_in">export</span> LD_LIBRARY_PATH=<span class="code-snippet__variable">\)LD_LIBRARY_PATH:.
运行程序 编译完成后,你可以运行生成的程序。
 
     
       
     
讯享网https://mp.weixin..com/program
输出应该是:
 
     
       
     
讯享网Sum: 7
Product: 12
如果一切设置正确,程序将成功运行,并在运行时动态加载 libmath.so 动态库。
&nbsp; &nbsp; &nbsp; &nbsp;
讯享网

想了解更多

赶紧扫码关注

小讯
上一篇 2025-05-27 23:15
下一篇 2025-05-31 21:43

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/185139.html