首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

/usr/bin/ld: /tmp/cc9zxSDP.o:对符号的引用未定义

这个问答内容涉及到编译器和链接器的错误信息。具体来说,"/usr/bin/ld: /tmp/cc9zxSDP.o:对符号的引用未定义"是指链接器(ld)在链接过程中发现/tmp/cc9zxSDP.o目标文件中引用的符号未定义。

这个错误通常发生在编译多个源文件时,其中一个源文件引用了另一个源文件中定义的函数或变量,但是链接器无法找到该函数或变量的定义。

要解决这个问题,可以采取以下步骤:

  1. 确保所有的源文件都被正确编译,并且生成了对应的目标文件。检查/tmp/cc9zxSDP.o文件是否存在,如果不存在,则可能是编译过程中出现了错误。
  2. 检查引用的符号是否在其他源文件中定义。如果是,确保这些源文件也被正确编译,并且生成了对应的目标文件。
  3. 如果引用的符号是在外部库中定义的,确保链接器能够找到该库。可以通过在链接命令中添加库文件路径或者使用-l选项指定库名来解决。
  4. 如果引用的符号是在当前源文件中定义的,检查是否存在拼写错误或者命名空间问题。确保函数或变量的名称和声明一致。

总结一下,这个错误提示表明在链接过程中发现了未定义的符号引用。解决方法包括确保所有源文件正确编译、检查符号是否在其他源文件或外部库中定义、检查命名是否正确。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux命令(65)——ld命令

-b :指定目标代码输入文件的格式 -Bstatic:只使用静态库 -Bdynamic:只使用动态库 -Bsymbolic:把引用捆绑到共享库中的全局符号 -c ,--mri-script=:为与MRI链接器兼容,ld接受由MRI命令语言编写的脚本文件 --cref:创建跨引用表 -d,-dc,-dp:即使指定了可重定位的输出文件.../写入文本和数据段 -n,--nmagic: 关闭节的页面对齐,并禁用对共享库的链接。...org>:使用指定的地址作为bss段的起始点 -t,--trace:在处理输入文件时显示它们的名称 -u ,--undefined=:强制指定符号在输出文件中作为未定义符号...warn-once:对于每个未定义的符号只发出一次警告 -warn-section-align:如果为了对齐而改动了输出段地址,则发出警告 --whole-archive:对于指定的存档文件,在存档中包含所有文件

17.7K13
  • 程序一定要从main函数开始运行吗?

    A: 这里涉及到程序链接的两个步骤: 空间与地址分配:扫描所有的输入目标文件,获得它们每个段的长度属性和位置,收集输入目标文件中的符号表中的所有符号定义和符号引用,统一放到一个全局符号表中,合并所有的段...Tips: 外部符号指的是目标文件需要引用的符号,但是定义在其它目标文件中,链接前外部符号地址都是000000之类,链接后的可执行文件就可以看见这些外部符号都是有地址的。...,在链接器扫描完所有的输入目标文件后,所有这种未定义的符号都应该能在全局符号表中找到,否则报符号未定义错误。...注意:我们代码里明明用的是printf,为什么它却引用了puts的符号呢,因为编译器默认情况下会把只用一个字符串参数的printf替换成puts, 可以节省格式解析的时间,使用-fno-builtin会关闭这个内置函数优化选项...I:该符号对另一个符号的间接引用 N:debug符号 R:该符号位于只读数据区 T:该符号位于代码段 U:该符号在当前文件未定义,定义在别的文件中 ?

    1.3K30

    一个奇怪的链接问题

    /ccx5lXbS.o:在函数‘main’中: expTest.c:(.text+0x20):对‘exp’未定义的引用 collect2: error: ld returned 1 exit status...我们发现,同样的编译方法编译不过了,提示对‘exp’未定义的引用,并且抛出链接出错。...再次编译运行: gcc -lm -o expTest expTest.c /tmp/ccYT3E65.o:在函数‘main’中: expTest.c:(.text+0x20):对‘exp’未定义的引用...collect2: error: ld returned 1 exit status 为什么还是不行呢?...这个就涉及到链接器的工作原理了,在此只简单说明一下:链接过程中,需要进行符号解析,并且是按照顺序解析;如果库链接在前,就可能出现库中的符号不会被需要,链接器不会把它加到未解析的符号集合中,那么后面引用这个符号的目标文件就不能解析该引用

    1.6K20

    Linux From Scratch(LFS11.0)构建 LFS 系统 - 移除调试符号

    大多数使用以下命令的用户不会遇到什么困难。但是,如果打错了命令,很容易导致新系统无法使用,因此在运行 strip 命令前,最好备份 LFS 系统的当前状态。 一些库的调试符号需要保存在单独的文件中。...为了避免这种情况,将一些库和程序复制到 /tmp 中,在那里移除调试符号,再使用 install 命令将它们安装回原位置。.../lib; find libnss*.so* -type f)" for BIN in $online_usrbin; do cp /usr/bin/$BIN /tmp/$BIN strip...--strip-unneeded /tmp/$BIN install -vm755 /tmp/$BIN /usr/bin rm /tmp/$BIN done for LIB in $...---- 本次分享到此结束啦~ 如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是我创作最大的动力。 ❤️ 技术交流可以 关注公众号:Lucifer三思而后行 ❤️

    82340

    记一次Linux挖矿病毒的清除

    /bin/bash SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin function b.../work/xig/xig /opt/yilu/work/xige/xige /tmp/thisxxs /usr/bin/.sshd /usr/bin/bsd-port/getty chmod -x...同理其他删除不掉的病毒文件。 ld.so.preload文件指向了/usr/local/lib/libftp.so 将libftp.so 拷贝出来后删除。...看到了这两个文件的所在位置。使用 ls -al 列出隐藏文件。将mdmisc拷贝后删除。但是scsitgtd,bin目录下并没有找到。 我们先对mdmisc进行简单分析。字符串提取。 ?...修改为可执行,运行后删除,这也就是为什么我们可以在进程中看到他,但是不能找到他的原因了。 对这个字符串做交叉引用,看是从哪里下载下来的。 ?

    10.3K32

    linux动态库和静态库

    一、静态库解析符号引用: 链接器ld是如何使用静态库来解析引用的。在符号解析阶段,链接器从左至右,依次扫描可重定位目标文件(*.o)和静态库(*.a)。...在这个过程中,链接器将维持三个集合: 集合E:可重定位目标文件(*.o文件)的集合。 集合U:未解析(未定义)的符号集,即符号表中UNDEF的符号。...1、对于每个输入文件f,如果是目标文件(.o),则将f加入E,并用f中的符号表修改U、D(在文件f中定义实现的符号是D,在f中引用的符号是U),然后继续下个文件。...如果静态库中某个成员m(某个.o文件)定义了一个符号来解析U中引用,那么将m加入E中,    同时使用m的符号表,来更新U、D。对静态库中所有成员目标文件反复进行该过程,直至U和D不再发生变化。...(即: rm libold.so,此时,如果ld.so正在加在libold.so,内核就在引用libold.so的inode节点,rm libold.so的inode并没有被真正删除,当ld.so对libold.so

    12.4K20

    C++ 链接库顺序导致的符号未定义问题

    符号未定义是链接过程中常见的问题,有时候很明显,有时候却很隐晦,比如链接库的顺序导致的符号未定义问题。...问题描述使用 gcc/g++ 编译一个项目的时候,出现了未定义的符号,符号来源于一个开源库,确认了库的位置,库中符号正常定义,库及其路径都被正确的引用了。...这是一个典型的库链接顺序导致的符号未定义问题了。...如果不是相互独立,那么必须对它们进行排序,使得对于每个目标文件的外部引用的符号 s,在命令行中至少有一个 s 的定义是在对 s 的引用之后。...想想,因为 gcc 对库的顺序要求和 –as-needed(因为 libGalaxyRT.so 在 mutex.o 的左边,所以 gcc 认为没有用到它,–as-needed 将其忽略),ld 忽略 libGalaxyRT.so

    35800

    GCC 编译器的使用

    链接器处理归档文件的方法是:扫描归档文件,寻找某些成员,这些成员的符号目前已被引用,不过还没有被定义。但是,如果链接器找到普通的 OBJ 文件,而不是库文件,就把这个 OBJ 文件按平常方式链接进来。...main.o sub.o -lgcc -lgcc_eh -lc -lgcc -lgcc_eh /usr/bin/ld: warning: cannot find entry symbol _start...main.o sub.o /usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 08048074 main.o(.text...(9)-u symbol 使链接器认为取消了 symbol 的符号定义,从而链接库模块以取得定义。可以使用多个 `-u’选项,各自跟上不同的符号,使得链接器调入附加的库模块。.../bin/ld: cannot find -lsub collect2: ld returned 1 exit status 可以使用-Ldir 选项将当前目录加入搜索路径,如下则链接成功: $ gcc

    3.9K31

    静态链接库和动态链接库的区别

    动态库的搜索路径搜索的先后顺序是:1.编译目标代码时指定的动态库搜索路径;2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;3.配置文件/etc/ld.so.conf中指定的动态库搜索路径...lib,/usr/libflag表示在什么时候解决未定义的符号(调用)。...取值有两个:1) RTLD_LAZY : 表明在动态链接库的函数代码执行时解决。2) RTLD_NOW : 表明在dlopen返回前就解决所有未定义的符号,一旦未解决,dlopen将返回错误。...main.c -ldl-rdynamic选项以指定输出文件为动态链接的方式-s指定删除目标文件中的符号表,-ldl则指示装配程序ld需要装载dl函数库。...抱着对问题必究到底的心情,来试试看。先删除除.c和.h外的所有文件,恢复成我们刚刚编辑完举例程序状态。

    8.4K21

    企业安全建设之基于Redis未授权访问的挖矿蠕虫分析

    # 0x01 攻击方式 利用的是通用漏洞入侵服务器并获得相关权限,从而植入挖矿程序再进行隐藏。 通过对脚本的分析,发现黑客主要是利用 `Redis未授权访问漏洞`进行入侵。...借此使用计划任务执行命令, 其中` */1 * * * *` 指的是每分钟执行一次相关命令 整个python文件的作用就是蠕虫式传播,使用python对Redis未授权访问的利用,将挖矿文件传播给B段的...SHELL=/bin/sh #此脚本使用/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin #环境变量,用于遍历...#创建 新的文件ld.so.preload、libntp.so touch -acmr /bin/sh /usr/local/lib/libntp.so } function python() { nohup...函数)并执行 `top() 函数` 以 so 文件劫持 (/etc/ld.so.preload) 的方式执行挖矿木马,是更隐蔽的执行方式 `python() 函数` 蠕虫式传播,使用python对Redis

    1.1K20
    领券