C 编译器如何发现 -lm 指向文件 libm.a?

2023-12-31

Linux 中 C 编程中的 .a 文件是什么? 是库文件吗?

To merge with the math library libm.a you would type

 cc -o program_name prog.c -lm

when you compile the program. The -lm means: add in libm. If we wanted to add in the socket library libsocket.a to do some network programming as well, we would type

 cc -o program_name prog.c -lm -lsocket

and so on. 

这里编译器如何发现 -lm 指向文件 libm.a ,而 -lsocket 指向 libsocket.a ?

如果我们将头文件添加到程序中,我们是否必须在编译时提及库?


正如 Ignacio 所说,.a 文件是静态库。 “a”代表“archive”,.a 文件是由名为“ar”的程序构建的。

每个 .a 文件包含一个或多个 .o 文件和一个名称索引。在链接过程中,只有包含已用名称的 .o 文件才会包含在最终程序中。这样一来,就不会复制整个 C 库,而只会复制“printf”等使用过的函数。

编译器如何找到库?它有一个内置的搜索库路径集合。例如,如果询问,GCC 会告诉您其搜索路径:

# gcc -print-search-dirs
install: /usr/lib/gcc/i686-redhat-linux/4.4.4/
programs: =/usr/libexec/gcc/i686-redhat-linux/4.4.4/:/usr/libexec/gcc/i686-redhat-linux/4.4.4/:/usr/libexec/gcc/i686-redhat-linux/:/usr/lib/gcc/i686-redhat-linux/4.4.4/:/usr/lib/gcc/i686-redhat-linux/:/usr/libexec/gcc/i686-redhat-linux/4.4.4/:/usr/libexec/gcc/i686-redhat-linux/:/usr/lib/gcc/i686-redhat-linux/4.4.4/:/usr/lib/gcc/i686-redhat-linux/:/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../i686-redhat-linux/bin/i686-redhat-linux/4.4.4/:/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../i686-redhat-linux/bin/
libraries: =/usr/lib/gcc/i686-redhat-linux/4.4.4/:/usr/lib/gcc/i686-redhat-linux/4.4.4/:/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../i686-redhat-linux/lib/i686-redhat-linux/4.4.4/:/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../i686-redhat-linux/lib/:/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../i686-redhat-linux/4.4.4/:/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../:/lib/i686-redhat-linux/4.4.4/:/lib/:/usr/lib/i686-redhat-linux/4.4.4/:/usr/lib/

您可以使用“-L /path”选项添加更多库搜索路径。

在这些路径中,它首先搜索以“.so”扩展名命名的“动态库”。然后它搜索具有“.a”扩展名的静态库。它总是在名称前面添加“lib”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 编译器如何发现 -lm 指向文件 libm.a? 的相关文章

  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • “./somescript.sh”和“. ./somescript.sh”有什么区别

    今天我按照一些说明在 Linux 中安装软件 有一个需要首先运行的脚本 它设置一些环境变量 指令告诉我执行 setup sh 但是我执行时犯了一个错误 setup sh 所以环境没有设置 最后我注意到了这一点并继续进行 我想知道这两种调用脚
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • PHP 日志文件颜色

    我正在编写一个 PHP 日志文件类 但我想为写入文件的行添加颜色 我遇到的问题是颜色也会改变终端的颜色 我想要实现的是仅更改写入日志文件的行的颜色 class logClass extends Singleton private funct
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐

  • BigDecimal movePointRight 和 scaleByPowerOfTen 之间有什么区别?

    使用以下代码 BigDecimal x new BigDecimal 34 5678 BigDecimal a x movePointRight 3 BigDecimal b x scaleByPowerOfTen 3 BigDecimal
  • 如何在Linux上传递带感叹号的参数?

    我有一个简单的 Python 脚本 它接收用户名和密码作为参数 但我的密码包含两个感叹号 当我像这样调用我的脚本时 salafek dellboy Desktop emailsender py u username p pass 我之前输入
  • 如何在Linux/Unix中创建大小超过2GB的文件?

    我有一项家庭作业 我必须使用 BitTorrent 算法将一个非常大的文件从一个源传输到多台机器 最初 我将文件切成块 然后将块传输到所有目标 目标具有与其他目标共享其拥有的块的智能 效果很好 我想传输 4GB 文件 因此我对四个 1GB
  • SQLAlchemy 声明式中基于对象的默认值

    使用 SQLAlchemy 可以为每个函数添加默认值 据我了解 这也可能是可调用的 没有任何参数或带有可选的 ExecutionContext 参数 现在在声明性场景中 我想知道是否有可能有一个用object正在存储 IE 可能像这样 Ba
  • 如何从字符串创建 org.xml.sax.InputSource?

    我正在遵循指南 它给了我以下代码 InputSource inputSource new InputSource new FileInputStream new File path to xml file xml 我想知道的是我如何仍然可以
  • rbenv 上的 ruby​​ 3.0.0 在哪里

    rbenv install list all当然 除了许多其他事情之外 还向我展示了 3 0 0 dev 3 0 0 preview1 3 0 0 preview2 但在哪里3 0 0本身 实际的最终版本 我想尝试一下 并非所有已发布的功能
  • 在Python中格式化多行字典的正确方法是什么?

    在Python中 我想在我的代码中编写一个多行字典 有几种方法可以对其进行格式化 以下是我能想到的一些 mydict key1 1 key2 2 key3 3 mydict key1 1 key2 2 key3 3 mydict key1
  • 消息框停止验证

    我不明白为什么消息框 或 simpledialog 会破坏以下代码的流程 该代码基本上验证了 python 3 5 中的输入框 它检查该字段是否仅包含数字值 并且长度不超过 9 位数字 但输入框可以为空 在用户确定后 向用户添加一条消息 允
  • 使用正则表达式提取由分隔符分隔的文本的某些部分

    我有一个示例输入文件 如下所示 其中包含 ID 名称 开始日期 结束日期 年龄 描述和位置列 220 John 23 11 2008 22 12 2008 28 Working as a professor in University Hy
  • Wi-Fi 直连技术

    我正在考虑创建一个通过 Wi Fi Direct 传输视频流的应用程序 我已经用谷歌搜索过 甚至在 Stackoverflow 中 但我还没有找到指定支持设备的列表 我的问题是 是否可以在 Samsung Galaxy Mini 带有 An
  • 如何使用张量流训练简单的非线性回归模型?

    我见过这个线性回归的例子 https github com aymericdamien TensorFlow Examples blob master notebooks 2 20 20Basic 20Classifiers linear
  • 如何在 Django 中自定义 related_name 参数

    我有一个抽象模型和两个子模型 例如 class Invoice models Model user models ForeignKey User related name class s class Meta abstract True c
  • Drools(专家系统)与 Android 项目的集成

    我有兴趣使用 Drools JBoss 专家系统基于规则的系统开发 Android 应用程序 它通过 Eclipse 每个工具 v3 2 都有一个插件 但我不完全知道如何成功地将 Drools Jars 集成到 Android 项目中 有一
  • C++, Win32 LoadString 包装器

    我想听听您对 LoadString Win32 函数的这个包装的看法 int LoadWString HINSTANCE hInstance In UINT uID In std wstring str Out return LoadStr
  • Cucumber.wants_to_quit 的 cucumber-jvm 等价物是什么?

    我正在使用 cucumber jvm 编写测试 我希望系统在第一个失败的场景中停止运行测试 我找到了为 Cucumber Ruby 编写的示例代码 它通过 After 挂钩来执行此操作 我正在寻找正确的 java 类和方法来调用 这相当于在
  • 车把块助手:每个都有排序

    我有一个 json 对象数组 我使用 Handlebars 模板输出它们 我目前正在使用 each object each 我现在需要按对象的属性之一对对象进行排序 这再次使用把手助手和咖啡脚本没有问题 但是 我的模板中有一个问题 因为我无
  • mysql 准备好的语句参数和排序查询

    我有一个表单 其目的是将当前显示的记录放入一个类别中 我通过 php 使用以下 html 代码来执行此操作
  • 使用 JSON 序列化(和反序列化)“复杂”Rails 对象

    可能是一个愚蠢的问题 但我对 Rails 比较陌生 并且想知道 Rails 如何处理序列化具有多个 和 或属于 另一个类的对象的模型 它会默认序列化整个对象图吗 你一定想要那个吗 你能控制吗 如何 接收端关于如何反序列化它有什么技巧吗 或者
  • 想学习Windows编程,有什么建议吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • C 编译器如何发现 -lm 指向文件 libm.a?

    Linux 中 C 编程中的 a 文件是什么 是库文件吗 To merge with the math library libm a you would type cc o program name prog c lm when you c