makefile 语法 /usr/bin/ld: cannot find -lxxxx

2023-05-16

GCC编译错误

1./usr/bin/ld:/tmp/ccd/UkmoA.o :undefined reference to symbol ‘ERR_free_strings@OPENSSL_1.0.0’
//lib/i386-linux-gnu/libcrypto.so.1.0.0:error adding symbols:DSO missing from command line

error1:
这里写图片描述

解决方法:
makefile 文件中加入 –lcrypto (放在-lssl之后)
指定程序的动态链接库libcrypto.so.1.0.0
这里写图片描述

2./usr/lib/ld :can’t find -lmysqlclient

error2:
这里写图片描述

解决方法:
因为动态库文件mysqlclient没在默认路径下(/usr/lib /lib /usr/local/lib).
所以需要指明动态链接库的路径 :-L/usr/lib/mysql/ -lmysqlclient
这里写图片描述

3.error while loading shared libraries:libmysqlclient.so.18:can’t open shared object file :no such file or directory

error3:
这里写图片描述

解决方法:
1. 编辑/etc/ld.so.conf文件,加入 libmysqlclient.so.18所在在的路径:/usr/lib/mysql

这里写图片描述
2. 然后执行命令:
$ ldconfig
ldconfig 命令的用途主要是在默认目录 (/usr/lib、/lib)以及动态库配置文件/etc/ld.so.conf所列目录下搜索出可共享的动态链接库(libxxxx.so*),进而创建出动态装入程序(ld.so)。所需的连接和缓存文件。缓存文件默认是/etc/ld.so.cache,此文件保存以排好序的动态链接库名字列表。

GCC编译基本过程

预处理->编译->连接->加载

  • 预处理:#开头
  • 编译:程序构建过程, 生成.o文件,gcc 依赖顺序问题(从后向前),如果文件a依赖于文件b,那么编译的时候必须把a放前面,b放后面。
  • 连接:将所有的对象文件和库串联起来,成为可运行程序。静态库已经植入程序,共享库在程序中包含其引用。
  • 加载:程序启动,引用共享库,GCC编译器假定所有的共享库以lib开头,以.so或者.a结尾。

GCC动态库与共享库

  • 什么是动态库与共享库?
    每个人的代码不可能从0写起,需要调用各种库函数,静态库编译时加载,动态库运行时加载。
    静态库的格式:libxxxx.a
    动态库的格式:libxxxx.so.major.minor xxxx为该lib的名称 major主版本号 minor副版本号

  • 如何知道一个可执行程序依赖哪些库
    这里写图片描述
    解释:
    可执行程序ln依赖于libc库和ld-linux库

  • 如何定位共享库文件
    a. -l(小写的l)
    用于指定程序要链接的库,-l后面紧接着(没有空格)就是库名xxxx(去掉lib和.so)
    Ps:放在默认路径(/lib ,/usr/lib , /usr/local/lib)的库直接用-i参数就能链接,只需编译时加上 –lxxxx 就能使用libxxxx.so,程序中include libxxxx.so对应的头文件,就可以调用该库的函数。
    b. -L(大写的L)
    但是libxxxx.so没有放在默认的三个路径下时,就需要-L指定libxxxx.so的路径,否则程序就会报错(can’t find -lxxxx)。
    假设libxxxx.so所在目录为/aa/bb/cc,那么使用格式如下:-L/aa/bb/cc –lxxxx

ldconfig指令详解

ldconfig 命令的用途主要是在默认目录 (/usr/lib、/lib)以及动态库配置文件/etc/ld.so.conf所列目录下搜索出可共享的动态链接库(libxxxx.so*),进而创建出动态装入程序(ld.so)。所需的连接和缓存文件。缓存文件默认是/etc/ld.so.cache,此文件保存以排好序的动态链接库名字列表。

程序连接(运行)时首先在/etc/ld.so.cache查找共享库,找不到的话然后再到/etc/ld.so.conf的路径里面去查找。
linux启动时会执行一次该命令,之后如果修改了/lib/或/usr/lib,安装了新的动态链接库时,一定要执行一次$ldconfig。

Ps:

  • 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig
  • 默认目录以外添加动态链接库,一定要修改/etc/ld.so.conf,然后再调用ldconfig
  • 比如之前安装mysql-connector-c-6.1.11-linux-glibc2.12-i686,将其lib文件夹中的mysqlclient动态链接库拷贝到/usr/lib/mysql文件夹下,这时就需要在/etc/ld.so.conf下面加一行/usr/lib/mysql/,保存过后ldconfig一下,新的library才能在程序运行时被找到。
  • 如果想在这两个目录以外放lib,但是又不想在/etc/ld.so.conf中加东西(或者是没有权限加东西)。那也可以,就是export一个全局变量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时候使用。
  • ldconfig做的这些东西都与运行程序时有关,跟编译时一点关系都没有。编译的时候还是该加-L就得加,不要混淆了。
  • 总之,就是不管做了什么关于library的变动后,最好都ldconfig一下,不然会出现一些意想不到的结果。不会花太多的时间,但是会省很多的事。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

makefile 语法 /usr/bin/ld: cannot find -lxxxx 的相关文章

  • Makefile - 为什么读取命令不读取用户输入?

    我的 Makefile 中有以下代码 Root Path echo What is the root directory of your webserver Eg Server htdocs read root path echo root
  • 为什么我在mongodb中找不到_id的记录

    我试图通过 MongoID id 字段在 mongoDB 中查找记录 我找到了有关如何执行此操作的示例 但无法使其发挥作用 例子 recID 010101010101011 would be a valid mongodb id recID
  • 查找早于 FILE 的文件而不包含 FILE

    我有一个计划要使用find给我一个比某些 FILE 更旧的文件列表 然后使用xargs or exec 将文件移动到其他地方 搬东西不是问题 xargs mv trash工作正常 现在 如果我尝试使用 newer FILE then FIL
  • Python 中的 MATLAB 风格的 find() 函数

    在 MATLAB 中 很容易找到满足特定条件的值的索引 gt gt a 1 2 3 1 2 3 1 2 3 gt gt find a gt 2 find the indecies where this condition is true 3
  • Eclipse CDT生成的Makefile在哪里?

    我已经使用 Eclipse helios CDT 构建了一个 hello world C 项目 它编译得很好 但我想看一下生成的 Makefile CDT 我在项目文件夹 调试 发布文件夹或 src 文件夹中找不到它 我在哪里可以找到这个
  • C:创建静态库并使用 Makefile 进行链接

    我在尝试着了解静态和共享库 http randu org tutorials c libraries php 我想执行以下操作来创建一个单独编译和链接的 makefile 以便创建和链接静态库 形成最终的静态可执行文件 我有以下 Makef
  • 在 OS X 下将 ImageMagick 编译为 64 位?

    我正在尝试安装moddims http code google com p moddims 在 OS X 上 请参阅上一个问题 https stackoverflow com questions 1185106 how do i confi
  • 查找出现次数最多的单词

    搜索文档中出现次数最多的单词的最佳方法 算法 是什么 查找文档中出现次数最多的单词可以通过简单的 O n 时间复杂度完成直方图 http en wikipedia org wiki Histogram 基于哈希 histogram lt n
  • echo 命令,然后运行它? (如制作)

    有没有某种方法可以让 bash 进入一种详细模式 这样 当它运行 shell 脚本时 它会在运行之前回显将要运行的命令 也就是说 这样就可以看到运行的命令 以及它们的输出 类似于make 也就是说 如果运行像这样的 shell 脚本 ech
  • makefile patternrule 在目标文件名中带有更多通配符

    我需要创建一个特殊的 makefile 规则 最好通过一个示例来解释 也许我们用规则创建文件 test pdf tex pdflatex jobname test tex result pdf tex pdflatex jobname re
  • 防止 GNU make 在环境变量中扩展美元符号

    有没有办法让 GNU Make 在环境变量中按字面意思解释美元符号 获取这个 makefile echoFOO echo FOO 像这样运行它 FOO a bc make echo ac ac 我希望它能从字面上回应 a bc 但我找不到一
  • 如何制作轨道时间戳

    make 如何保留文件的时间戳 我正在尝试将我的 git 存储库部署到位 我正在为大多数不会改变的文件添加预编译的二进制文件 现在 当我从 git 签出存储库时 我不想编译这些 c 文件 我想使用这些预构建的二进制文件 因此 为了设置这个方
  • 有没有比“手表制造”更明智的替代方案?

    我遇到了这个有用的提示 如果您经常处理文件并且希望它们自动构建 则可以运行 手表品牌 每隔几秒钟它就会重新运行一次 一切都会构建完成 然而 它似乎一直在吞噬所有的输出 我认为它可能更聪明 也许显示输出流 但抑制 全部 不做任何事情 这样如果
  • 如何使用unix“find”命令查找所有cpp和h文件?

    我知道要找到所有 h我需要使用的文件 find name h 但如何找到所有 h AND cpp files find name h print o name cpp print or find name h o name cpp prin
  • Makefiles:从一个目录获取.cpp,并将编译后的.o放在另一个目录中

    我正在开发适用于移动设备 Windows Mobile 6 和 Android 的跨平台 2D 引擎 我的 Windows 版本已基本准备就绪 但我仍需要确保 Android 上也提供相同的功能 我想要的是一个Makefile在项目的根目录
  • 在 Linux 上的 makefile 和 Makefile 之间进行选择

    我想在一个目录中同时使用 Makefile 和 makefile 进行 make 默认情况下 它将执行makefile 我可以选择执行 Makefile 吗 提前致谢 最简单的选择是使用 f make f Makefile From man
  • 编辑 CMakeLists.txt 以使用 -fPIC 进行编译

    我正在尝试为名为 libnifalcon 的 NOVINT Falcon 安装驱动程序 我使用 cmake 创建 make 文件 但是当我运行 make 时出现错误 Linking CXX shared library lib libnif
  • makefile 中的 $< 和 $@ 是什么意思?

    I have a csv b csv 在我的docs csv目录中 我需要将每个文件转换为 json 文件 我遵循这个question https stackoverflow com questions 2706064 compile al
  • GNU Make “Abort trap: 6” 在 gcc 调用之后,但是单独执行时调用是有效的

    我正在使用 GNU Make 构建一个很多人都会使用的 C C 项目 makefile 尝试通用 因为该项目中有许多可选文件 每个用户通过 MATLAB 界面选择这些文件 然后通过命令行参数 make target OPTS XYZ 等 将
  • 查找-exec选项

    比如说 我想找到一些文件并执行 chmod 并使用另一个命令对其执行某些操作 例如 find name txt exec chmod 666 cp dst it says find missing argument to exec 我该如何

随机推荐

  • 数据结构 _ PAT练习 _ 7-13 Insert or Merge

    原题 点此链接1 解题思路 参考课本 xff1a 高等教育出版社 陈越主编 数据结构 参考视频 xff1a MOOC 浙江大学 数据结构与算法 本题主要考察的是简单插入排序 xff08 课本P268 xff09 以及归并排序的非递归算法 x
  • 数据结构 _ 基础练习 _ 7-14 Insertion or Heap Sort

    原题 点此链接1 题目分析 与前一题 Insert or Merge 相同2 xff0c 同样考察的是插入排序算法以及堆排序算法 算法如下 xff1a 首先需要判断是插入排序还是堆排序 xff0c 由于插入必然是 有序序列 43 相同的序列
  • Matlab v_findpeaks代码

    这里写自定义目录标题 Matlab v findpeaks代码写在前面代码 Matlab v findpeaks代码 写在前面 本函数主要用于寻找数据的上下极值点 xff0c 可以用于求取包络 参考链接 xff1a http www ee
  • Android实现MP4边下边播(边缓存边播放、在线播放)原理与代码

    推荐一款全平台广告聚合SDK ADEasy https blog csdn net u013640004 article details 105416193 对于这套方法我已经封装成库 xff0c 可以直接下载使用 MP4Info1 0 2
  • 如何实现PCB走线开窗上锡

    特别说明 xff1a 电路中需要驱动8路继电器 xff0c 当多路继电器闭合导通时电流大增 xff0c 为保证实际效果 xff0c 在加宽电流线的同时 xff0c 希望去掉电流线上的阻焊层 绿油层 xff0c 板子做出来以后 xff0c 就
  • sqlite3无法使用方向键解决方法

    Question xff1a sqlite3打开数据库后无法使用方向键 xff0c 没有命令回滚功能 Answer xff1a 缺少插件形成 xff0c 解决办法是安装libreadline dev sudo apt get install
  • 关于笔记本linux亮度调节

    Laptop安装linux 系统后 xff0c 开机默认亮度是最大 xff0c 每次开机都很刺眼 xff0c 开机后调节好亮度后 xff0c 重启又恢复了 现在介绍可以永久设置屏幕亮度的方法 xff0c 这样就不用每次开机都设置亮度那么麻烦
  • LINUX下挂载exfat格式u盘或移动硬盘

    我的u盘本来是ntfs格式的 xff0c 本来在linux系统下可以读 xff0c 但由于我双系统 xff0c u盘经常在windows和linux中插来插去 xff0c 后来经常导致u盘在linux中无法挂载 xff0c 提示说未知文件系
  • C语言 消息队列

    消息队列 xff08 也叫做报文队列 xff09 能够克服早期unix通信机制的一些缺点 作为早期unix通信机制之一的信号能够传送的信息量有限 xff0c 后来虽然POSIX 1003 1b在信号的实时性方面作了拓广 xff0c 使得信号
  • Norder软件[FDS和fstorage]

    FDS和fstorage 本文摘录于 xff1a https www cnblogs com iini p 9338169 html只是做学习备份之用 xff0c 绝无抄袭之意 xff0c 有疑惑请联系本人 xff01 这里摘抄重点 根据有
  • C语言 select函数使用

    在编程的过程中 xff0c 经常会遇到许多阻塞的函数 xff0c 好像read和网络编程时使用的recv recvfrom函数都是阻塞的函数 xff0c 当函数不能成功执行的时候 xff0c 程序就会一直阻塞在这里 xff0c 无法执行下面
  • linux 开机grub rescue修复

    安装linux系统后 系统的引导就会变成grub引导 假如对硬盘进行分区管理或一些其它操作后 开机进不去grub引导 界面显示黑屏 然后显示grub rescue gt 的字样时 就需要自己手动修复grub了 1 使用ls命令 ls执行命令
  • Qt5编译时出现<QtGui/QApplication> ---> No such file or directory错误解决办法

    Qt5的更新把目录结构都改变了 然后一些类也去掉了功能 本来我在qt4上写的程序放到qt5编译 马上弹出 lt QtGui QApplication gt gt No such file or directory错误 解决办法 安装libq
  • Qt for iOS,Qt 与Objective C混合编程

    因为我写了一系列Qt的博文以及一本书 Qt on Android核心编程 xff0c 最近有好几个使用Qt的朋友问起 Qt for iOS 的事情 xff0c 因为我在这方面的经验特别少 xff0c 写不出系统的文章来 xff0c 非常抱歉
  • HTML5 section、article和div区别

    在HTML5中 xff0c 规定开发过程中更加注重语义化和代码的结构标准 当中section article和div是非常相似的东西 xff0c 许多人无法区分它们 当初我对于这三个标签也很迷茫 xff0c 觉得都没什么区别 xff0c 用
  • Django安装

    操作系统 xff1a deepin15 1 检查python是否已安装 xff0c 运行命令 python如出现以下信息则python可用 Python 2 7 11 default Dec 9 2015 00 29 25 GCC 5 3
  • libcurl实现http交互

    原因 xff1a 由于涉及到使用libcurl进行http交互 xff0c 故在此进行记录调用流程 概况 xff1a 利用curl模块实现http请求 http介绍 xff1a xff08 hyperText Transfer Protoc
  • linux内核分析-简单的操作系统内核源码解读

    Linux内核分析 MOOC课程http mooc study 163 com course USTC 1000029000 学习笔记 源码组成 xff1a mypcb h mymain c myinterrupt c mypcb h sp
  • GCC 编译过程/编译命令详解/静态库与动态链接库/ error:undefined reference to

    GCC编译 xff1a 预处理 gt 编译 gt 连接 gt 加载 预处理 xff1a 处理程序中 开头的内容编译 xff1a 程序构建过程 xff0c 生成 o文件 xff0c gcc 依赖顺序问题 xff08 从后向前 xff09 xf
  • makefile 语法 /usr/bin/ld: cannot find -lxxxx

    GCC编译错误 1 usr bin ld tmp ccd UkmoA o undefined reference to symbol ERR free strings 64 OPENSSL 1 0 0 lib i386 linux gnu