gcc -l参数和-L参数

2023-10-27

·-l参数和-L参数

-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so去掉就是库名了

好了现在我们知道怎么得到库名,当我们自已要用到一个第三方提供的库名字libtest.so,那么我们只要把libtest.so拷贝到/usr/lib里,编译时加上-ltest参数,我们就能用上libtest.so库了(当然要用libtest.so库里的函数,我们还需要与libtest.so配套的头文件)

放在/lib/usr/lib/usr/local/lib里的库直接用-l参数就能链接了,但如果库文件没放在这三个目录里,而是放在其他目录里,这时我们只用-l参数的话,链接还是会出错,出错信息大概是:“/usr/bin/ld: cannot find -lxxx”,也就是链接程序ld在那3个目录里找不到libxxx.so,这时另外一个参数-L就派上用场了,比如常用的X11的库,它在/usr/X11R6/lib目录下,我们编译时就要用-L/usr/X11R6/lib -lX11参数,-L参数跟着的是库文件所在的目录名。再比如我们把libtest.so放在/aaa/bbb/ccc目录下,那链接参数就是-L/aaa/bbb/ccc -ltest

另外,大部分libxxxx.so只是一个链接,以RH9为例,比如libm.so它链接到/lib/libm.so.x/lib/libm.so.6又链接到/lib/libm-2.3.2.so

如果没有这样的链接,还是会出错,因为ld只会找libxxxx.so,所以如果你要用到xxxx库,而只有libxxxx.so.x或者libxxxx-x.x.x.so,做一个链接就可以了ln -s libxxxx-x.x.x.so libxxxx.so

手工来写链接参数总是很麻烦的,还好很多库开发包提供了生成链接参数的程序,名字一般叫xxxx-config,一般放在/usr/bin目录下,比如

gtk1.2的链接参数生成程序是gtk-config,执行gtk-config --libs就能得到以下输出"-L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic

-lgmodule -lglib -ldl -lXi -lXext -lX11 -lm",这就是编译一个gtk1.2程序所需的gtk链接参数,xxx-config除了--libs参数外还有一个参数是--cflags用来生成头文件包含目录的,也就是-I参数,在下面我们将会讲到。你可以试试执行gtk-config --libs --cflags,看看输出结果

现在的问题就是怎样用这些输出结果了,最笨的方法就是复制粘贴或者照抄,聪明的办法是在编译命令行里加入这个`xxxx-config --libs --cflags`,比如编译一个gtk程序:gcc gtktest.c `gtk-config --libs --cflags`这样就差不多了。注意`不是单引号,而是1键左边那个键。

5-include-I参数

-include用来包含头文件,但一般情况下包含头文件都在源码里用#include xxxxxx实现,-include参数很少用。-I参数是用来指定头文件目录/usr/include目录一般是不用指定的,gcc知道去那里找,但是如果头文件不在/usr/include里我们就要用-I参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上-I/myinclude参数了,如果不加你会得到一个"xxxx.h: No such file or directory"的错误。-I参数可以用相对路径,比如头文件在当前目录,可以用-I.来指定。

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

gcc -l参数和-L参数 的相关文章

  • gcc 链接器库搜索顺序;路径加静态与共享

    通读 gcc 手册 我相信以下两种说法是正确的 在命令行上指定的库搜索路径在 默认 路径之前搜索 我认为这意味着 LIBRARY PATH 环境变量中的内容 共享库将优先于静态库进行链接 在没有标志说明要这样做的情况下 但这两者谁占主导地位
  • 有没有办法删除 FILE_FLAG_DELETE_ON_CLOSE?

    在我的应用程序中 我想使用 FILE FLAG DELETE ON CLOSE 打开一个临时文件 然而 在某些情况下 临时文件需要保留并且非常大 我想删除打开的句柄上的 FILE FLAG DELETE ON CLOSE 属性 这可能吗 复
  • Java 扫描仪问题 (JFrame)

    我正在尝试使用扫描仪来编辑塔防游戏的级别 但是 它不会将级别 图块图像 更新为自定义文件的级别 0 是草 1 是石头 1 是什么都没有 等等 我发现了错误 但如何修复它 我需要添加 更改什么才能消除这个错误 java lang NullPo
  • 如何为我的文件格式选择一个好的幻数?

    我正在从头开始设计一个二进制文件格式 我想在开头包含一些魔术字节 以便可以轻松识别它 我该如何选择哪些字节 我不知道有任何幻数的中央注册表 所以这只是一个随机选择一些尚未被附近 UNIX 机器上的文件命令识别的东西的问题吗 远离超短的神奇数
  • 如何将 elf 解释器(ld-linux.so.2/ld-2.17.so)构建为静态库?

    如果我的问题不准确 我深表歉意 因为我没有太多 Linux 相关经验 我目前正在构建一个 Linux 从头开始 主要遵循 linuxfromscratch org 版本的指南 7 3 我遇到了以下问题 当我构建可执行文件时 获取一个称为 E
  • iCloud Drive 内用户选择的文件夹内的垃圾文件

    我的应用程序可在任何用户选择的文件夹内处理用户 txt 文件 创建 更改 删 除 我只是在内部存储书签以访问用户选择的文件夹和文件 现在 在 macOS Catalina 中 当源文件夹位于 iCloud Drive 内时 系统仍然允许我创
  • xhr 响应 for 循环不起作用

    我有 xhr 和 for 循环 它的工作非常罕见 for var i 0 i lt this files length i var xhr new XMLHttpRequest xhr upload onprogress function
  • 使用 JSONKit 解析 JSON 文件

    我正在构建一个音叉应用程序 货叉应允许最多 12 个预设节距 此外 我希望允许用户选择一个主题 每个主题都会加载一组预设 不必使用所有预设 我的配置文件看起来像这样 theme A3 comment An octave below conc
  • Java - 为什么从文件读取时跳过零

    为什么我的程序在读取文件时忽略零 例如 以下是文件中的数字 0001 0011 0010 然后这是我的输出 1 11 10 这是我的代码 File file new File num txt Scanner scanner new Scan
  • 将 numpy 数组及其大小写入二进制文件

    我需要将 2D numpy 数组写入文件 包括其尺寸 以便我可以从 C 程序中读取它并创建相应的数组 我编写了一些简单的代码来保存数组 并且可以从 C 读取它 但是如果我尝试先写入数组的大小 它总是会给我一个错误 这是我的简单 python
  • 不可能的事情发生了!这是什么意思?

    我遇到了一个有趣的运行时错误 我认为这是某种内存泄漏 我写了以下程序 C Code include
  • gtk 最小尺寸

    有没有一种简单的方法来要求 GTK 小部件具有最小宽度 高度 我知道你可以在a列上做到这一点TreeView 但是它适用于一般的小部件吗 对于 C C gtk widget set size request http library gno
  • GCC 详细模式输出解释

    我是 Linux 新手 谁能向我解释一下我的 hello world 程序的以下详细模式输出 另外 这些文件是做什么用的crt1 o crti o crtend o crtbegin o and crtn o and lc and lgcc
  • 如何读取 XML 文件并从中获取值以在 PHP 编码的 HTML 页面中显示

    我有一个 XML 文件 其中有一些重复的标签 其中包含不同的值 我需要获取这些值并显示在我的网页中 请帮助我得到这个 如果您使用 PHP5 可以查看 SimpleXML 您可以在这里找到介绍教程 http www w3schools com
  • mfence 和 asm 易失性 ("" : : : "内存") 的区别

    据我了解 mfence是硬件内存屏障 而asm volatile memory 是编译器障碍 但是 可以asm volatile memory 用来代替 mfence 我感到困惑的原因是这个链接 http gcc gnu org ml gc
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 错误:-march= 开关的值错误

    我写了一个Makefile 但无法让它工作 我有一个选项应该选择编译到哪个处理器 然而 当我跑步时make从命令行它说 tandex tandex P 6860FX emulators nintendo sdks 3DS SDK HomeB
  • 过滤路径列表以仅包含文件

    如果我有一个清单FilePaths 如何过滤它们以仅返回常规文件 即不是符号链接或目录 例如 使用getDirectoryContents main do contents lt getDirectoryContents foo bar l
  • CUDA 8 编译错误 -std=gnu++11

    我正在尝试转换一些代码以使用 CUDA 并且我认为我遇到了兼容性问题 我们使用CMake 这些是我使用的 gcc 和 CUDA 版本 gcc version gcc Ubuntu 5 4 0 6ubuntu1 16 04 5 5 4 0 2

随机推荐

  • ACL技术-------访问控制列表

    1 ACL原理 设备根据事先设置好的报文匹配规则对经过该设备的流量进行匹配 然后对报文执行预先设定的处理动作 2 ACL功能 1 访问控制 在流量流入或者流出的接口上匹配流量 动作 允许 permit 拒绝 deny 2 抓取流量 3 AC
  • Error in py_run_file_impl(file, local, convert) : ModuleNotFoundError: No module named ‘igraph‘

    在HPC平台上跑我的R语言代码 结果一直报错说 Error in py run file impl file local convert ModuleNotFoundError No module named igraph 我就知道是我R语
  • 单片机--USART

    目录 1 通信的基础知识 2 USART 3 串口通信协议 4 相关寄存器 串口控制寄存器 波特率寄存器 中断和状态寄存器 编辑 数据发送寄存器 数据接收寄存器 5 USART功能框图 6 串口发送实验 实验要求 1 观察实物 2 分析原理
  • 路由与路由表简介

    路由的概念 从字面上来说 路由 就是路径选择的意思 路由是指网络设备通过网络将信息正确传输到指定目的地的方式 而路由器正是这样的 网络设备 它可以根据目标网络选择 最优 的路径来决定下一跳跳向哪个路由器 但是什么是最优的路径 最优并不意味着
  • Go语言网络编程(socket编程)TCP粘包

    1 TCP粘包 服务端代码如下 socket stick server main go func process conn net Conn defer conn Close reader bufio NewReader conn var
  • 12306登录验证码识别

    最近在研究12306验证码识别 前期的12306查询验证码识别已经上线了 详见http download csdn net download ghost man 10160932的博客 里面的12306查询验证码已经上线了 可以去体验一下
  • linux服务器前后端部署遇到的问题以及解决办法

    nginx部署前端 将静态资源打包上传到自己指定的目录 nginx 配置 到这里 前端就部署完成了 当时访问的时候发现只能加载html页面 所有的js css 图片等等全部404 原因是没有指定静态资源的绝对路径 因为我用的宝塔面板的ngi
  • 如何添加Burp Suite添加https证书

    Burp Suite是一款强大的安全测试工具 可以用来设置代理 抓取http数据包 如果添加了https证书 就可以抓取https数据包 一 前期准备 联网的电脑一台 Burp Suite软件 firefox浏览器 并安装proxy swi
  • 第1195期机器学习日报(2017-12-26)

    机器学习日报 2017 12 26 Moments in Time IBM MIT联合提出最新百万规模视频动作理解数据集 ChatbotsChina 2017深度学习框架大事记 wx SWATS 自动由Adam切换为SGD而实现更好的泛化性
  • HTML与计算机代码

    目录 计算机代码 HTML 计算机代码格式 HTML 键盘格式 实例 HTML 样本格式 实例 HTML 代码格式 实例 实例 实例 HTML 变量格式化 实例 HTML 计算机代码元素 一个完整的实例 计算机代码 var person f
  • 2023年第十四届蓝桥杯单片机开放与设计省赛微析与经验分享

    前言 2023年4月8日 就在昨天 本人刚参与了第十四届蓝桥杯单片机开放与设计省赛 整体做下来 且不谈客观题 今年的程序题 个人感觉有点像大杂烩 题量大 细节多 而且有些要求定义不够清晰 所以本人这次做的不够完美 并且因为时间问题有些小功能
  • 教妹学Java(七):究竟什么是JVM?

    大家好 我是沉默王二 一个和黄家驹一样身高 和刘德华一样颜值的程序员 本篇文章通过我和三妹对话的形式来谈一谈 究竟什么是 JVM 教妹学 Java 没见过这么有趣的标题吧 语不惊人死不休 没错 本篇文章的标题就是这么酷炫 接受不了的同学就别
  • 30天自制操作系统第3天harib00g

    30天自制操作系统 第3天进入32位模式并导入 C 语言 确认操作系统的执行情况 harib00g 准备材料 windows环境 VMware Workstation Visual Studio Code 程序和源代码 https pan
  • openmmlab第五次作业

    MMDetection是商汤和港中文大学针对目标检测任务推出的一个开源项目 它基于Pytorch实现了大量的目标检测算法 把数据集构建 模型搭建 训练策略等过程都封装成了一个个模块 通过模块调用的方式 我们能够以很少的代码量实现一个新算法
  • 解封装(七):av_read_frame读取帧数据函数分析和产生的空间问题分析,以及AVPacket分析

    1 在完成了视频的格式的解析 即音视频编码参数获取之后 我们就可以开始读取具体的音视频帧数据 av read frame 我们要忠实的是 函数调用之后是否应该涉及到清理方法 先看下上面函数的参数 AVFormatContext s 文件格式
  • hadoop之yarn

    简介 一 YARN是一个通用资源管理系统和调度平台 为集群在利用率 资源统一管理和数据共享等方面带来了巨大好处 1 通用指不仅支持mr程序 也支持其它计算程序 2 资源管理包括集群的硬件资源 cpu 内存等 3 调度平台指多个程序同时执行时
  • 反向题在测试问卷信效度_九种方法筛选无效问卷及对研究设计的启示

    引言 随着网络及智能手机的普及 传统的一些纸笔测验渐渐被网络问卷所替代 网络问卷由于其便捷性 很大程度上方便了研究者和被试 2018年JOM一篇文章发现越来越多的研究者开始使用网络问卷收集数据 相关发表的文章也呈现逐年增加的趋势 参见Por
  • Linux——进程优先级

    1 什么是优先级 优先级和权限息息相关 权限的含义为能还是不能做这件事 而优先级则表示 你有权限去做 只不过是先去做还是后去做这件事罢了 2 为什么会存在优先级 优先级表明了狼多肉少的理念 举个例子 在日常生活中我们进行排队看医生 队列就是
  • CSDN如何转载别人的文章(快速转载)

    1 找到要转载的文章 用chrome浏览器打开 右键选择检查 2 在chrome中下方的框里找到对应的内容 html脚本中找到对应的节点 article content 选中节点 网页上被选中内容会被高亮显示 然后右键菜单选中 Copy g
  • gcc -l参数和-L参数

    l参数和 L参数 l参数就是用来指定程序要链接的库 l参数紧接着就是库名 那么库名跟真正的库文件名有什么关系呢 就拿数学库来说 他的库名是m 他的库文件名是libm so 很容易看出 把库文件名的头lib和尾 so去掉就是库名了 好了现在我