• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

无信不立

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

【g++】命令动态链接 和静态链接

一、动态链接

在 g++ 命令中,使用 -l 选项可以将指定的库文件链接到生成的可执行文件中。如果库是动态链接库(.so 文件),则使用 -l 选项时不需要指定库文件的扩展名。

例如,假设有一个名为 libfoo.so 的动态链接库,要在链接时使用它,可以执行以下命令:

g++ -o myprog myprog.cpp -lfoo

这里的 -lfoo 表示链接名为 libfoo.so 的库文件。

另外,还可以使用 -L 选项指定库文件的搜索路径。例如,如果 libfoo.so 库文件位于 /path/to/lib 目录下,则可以使用以下命令:

g++ -o myprog myprog.cpp -L/path/to/lib -lfoo

这里的 -L/path/to/lib 表示在 /path/to/lib 目录下搜索库文件。

需要注意的是,如果程序运行时找不到动态链接库,则会出现运行时错误。因此,在使用动态链接库时,应该确保库文件的路径正确,并且在运行程序时将库文件的路径包含在 LD_LIBRARY_PATH 环境变量中。

 

基于命令查看可执行文件都有哪些动态链接,可以使用ldd命令

命令格式:ldd 可执行文件名

Idd 【可执行文件名】
linux-vdso.so.1 (0x00007ffd63bcb000)
/$LIB/libonion.so => /lib64/libonion.so (0x00007fbe556a8000) libdb-5.3. so => /lib64/Libdb-5.3.so (0x00007fbe554da000)
libpthread.so.0 => /lib64/Libpthread.so.0 (0x00007fbe55264000)
libm.so.6 => /lib64/Libm.so.6 (0x00007fbe54ee2000)
libtcmalloc.so.4 => /lib64/Libtcmalloc.so.4 (0x00007fbe54ae6000)
libc.so.6 => /lib64/libc.so.6 (0x00007fbe54710000) libdl. so.2 => /11b64/libdl.so.2 (0x00007fbe5450c000)
libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007fbe5401a000) /lib64/1d-linux-x86-64.50.2 (0x00007fbe55484000)
libunwind.so.8 => /lib64/libunwind.so.8 (0x00007fbe53e02000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fbe53a6d000)
libgcc_s. so.1 => /lib64/libgcc_s.So.1 (0x00007fbe53855000)
libz.so.1 => /lib64/libz.so.1 (0x00007fbe5363d000)

 

 

 

 

二、静态链接

在 g++ 命令中,使用 -static 选项可以将指定的库文件静态链接到生成的可执行文件中。静态链接库(.a 文件)会直接被嵌入到可执行文件中,这样程序运行时不需要额外的库文件。

例如,假设有一个名为 libfoo.a 的静态链接库,要在链接时使用它,可以执行以下命令:

g++ -o myprog myprog.cpp -static -lfoo

这里的 -static 表示进行静态链接,-lfoo 表示链接名为 libfoo.a 的库文件。

另外,与动态链接库类似,可以使用 -L 选项指定库文件的搜索路径。例如,如果 libfoo.a 库文件位于 /path/to/lib 目录下,则可以使用以下命令:

g++ -o myprog myproc.cpp -L/path/to/lib -static -lfoo

这里的 -L/path/to/lib 表示在 /path/to/lib 目录下搜索库文件。

需要注意的是,静态链接会导致生成的可执行文件体积较大,但是程序运行时不需要额外的库文件。而动态链接则会使生成的可执行文件体积较小,但在程序运行时需要确保相应的动态链接库可用。

 

posted on 2024-08-29 19:32  无信不立  阅读(194)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3