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

由于libselinux未定义对gettid@GLIBC_2.30的引用,ld失败

问题描述:由于libselinux未定义对gettid@GLIBC_2.30的引用,ld失败。

回答: 这个问题是由于在链接过程中,发现libselinux未定义对gettid@GLIBC_2.30的引用,导致ld失败。下面我会详细解释这个问题和解决方法。

首先,让我们了解一些相关的背景知识。

libselinux是一个用于Linux系统的安全增强库,它提供了一系列的API用于处理SELinux(安全增强Linux)相关的操作。SELinux是一种在Linux内核中实现的安全模块,可以提供细粒度的安全策略来保护系统资源和进程。

gettid是一个用于获取线程ID的系统调用。在旧版本的GLIBC(GNU C库)中,gettid函数的符号被导出为"gettid"。然而,从GLIBC_2.30版本开始,gettid函数的符号被导出为"__gettid"。

当链接过程中发现对gettid@GLIBC_2.30的引用时,系统会尝试在链接时解析这个符号。如果libselinux中未定义对这个符号的引用,链接器ld会失败。

解决这个问题有几种方法:

  1. 更新libselinux:可以尝试更新libselinux版本,以确保它与GLIBC_2.30兼容。你可以查找并安装适合你系统的最新版本的libselinux。腾讯云相关产品和产品介绍链接地址:https://cloud.tencent.com/document/product/213/38107
  2. 检查依赖关系:检查你的应用程序的依赖关系,确保它们与GLIBC_2.30兼容。如果有其他库依赖于libselinux,并且它们与GLIBC_2.30不兼容,那么你可能需要更新或替换这些库。
  3. 编译选项调整:如果你的应用程序有一些特殊的编译选项,可能会导致ld在链接时出错。你可以尝试调整这些编译选项,以解决链接问题。

总结一下,由于libselinux未定义对gettid@GLIBC_2.30的引用,导致ld失败。解决这个问题的方法包括更新libselinux,检查依赖关系以及调整编译选项。

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

相关·内容

ubuntu gcc编译时’xxxx’未定义引用问题

http://www.cnblogs.com/oloroso/p/4688426.html gcc编译时’xxxx’未定义引用问题 原因 解决办法 gcc 依赖顺序问题 在使用gcc编译时候有时候会碰到这样问题...dso.o:在函数‘dso_load(char const*, char const*)’中: dso.cpp:(.text+0x3c):‘dlopen’未定义引用 dso.cpp:(.text+0x4c...):‘dlsym’未定义引用 dso.cpp:(.text+0xb5):‘dlerror’未定义引用 dso.cpp:(.text+0x13e):‘dlclose’未定义引用 原因 出现这种情况原因...但是在链接为可执行文件时候就必须要具体实现了。如果错误是未声明引用,那就是找不到函数原型,解决办法这里就不细致说了,通常是相关头文件未包含。...但是看上面编译时候是有添加-ldl选项,那么为什么不行呢? gcc 依赖顺序问题 这个主要原因是gcc编译时候,各个文件依赖顺序问题。

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

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

    28800

    linux软件安装(一)——源码安装

    PS:make clean命令用来清除上一次编译生成目标文件。这个步骤可有可无,但为了确保编译成功,还是加上为好。防止由于软件中含有残留目标文件导致编译失败。...因此拥有静态函数库软件较为庞大。而且当系统函数库更新时,引用该函数库所有软件都需要重新编译才能正常使用。这是非常麻烦!但拥有静态函数库软件可以独立运行。 2....由于软件中包含是函数库路径,因此该软件无法独立运行,且函数库路径不能发生变化,一旦变化,该软件将无法找到函数库,从而无法运行!这是动态函数库最大缺点。...在Linux中,可以使用ldconfig命令将指定函数库加载进内存。具体步骤如下: 1. 在/etc/ld.so.conf中设置需要加载进内存函数库 2.....1 => /lib64/libselinux.so.1 (0x0000003edb400000) libc.so.6 => /lib64/libc.so.6 (0x0000003eda400000

    4.4K40

    Binary程序分析查看类命令

    //4B(由于整型占用了4B) //论2:经过初始化全局变量保存在数据段中 int gg_data=1; // 论6:const修饰全局变量保存在文本段 const int g_data...ld-linux.so(elf动态库装载器)来实现; 它能够显示可执行模块dependency(所属)(所属),其原理是通过设置一系列环境变量,如下:LD_TRACE_LOADED_OBJECTS...libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f236c95d000) libcap.so.2 => /lib64/libcap.so.2 (0x00007f236c758000...我们知道ld-linux.so模块会先于executable模块程序工作,并获得控制权,因此当上述那些环境变量被设置时ld-linux.so选择了显示可执行模块dependency(所属)。....1 => /lib64/libaudit.so.1 (0x00007f1b92599000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f1b92372000

    70510

    一个奇怪链接问题

    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

    文件丢失?损坏?兼容性问题?到底是什么导致了错误

    就是初始化失败,没有更多信息; 用 strace来查看下系统调用(open),因为对文件操作必定要调用open函数,这里主要验证是否存在“文件丢失”问题。...open curl 127.0.0.1 2>&1 | grep -Evi "= \-1" | awk -F'["]' '{print $2}' | xargs -I{} basename {} ld.so.cache...由以上结果可以看出,不会是 找不到对应文件导致初始化失败;其实对于查找是否有动态链接库文件丢失可以用: ldd 命令,ldd命令输出结果中会报告有哪些文件是not found,而通过strace...libcom_err.so.2 (0x00007fbd99937000) libssh2.so.1 => /lib64/libssh2.so.1 (0x00007fbd9970d000) /lib64/ld-linux-x86....1 => /lib64/libselinux.so.1 (0x00007fbd98182000) libfreebl3.so => /lib64/libfreebl3.so (0x00007fbd97f7f000

    84820

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

    Tips: 外部符号指的是目标文件需要引用符号,但是定义在其它目标文件中,链接前外部符号地址都是000000之类,链接后可执行文件就可以看见这些外部符号都是有地址。...,在链接器扫描完所有的输入目标文件后,所有这种未定义符号都应该能在全局符号表中找到,否则报符号未定义错误。...如何指定程序入口 在ld链接过程中使用-e参数可以指定程序入口,由于一段简短printf函数其实都依赖了好多个链接库,我们也不太方便使用链接脚本将目标文件与所有这些依赖库进行链接,所以使用下面这段内嵌汇编程序来打印一段字符串.../test hello 如何使用自定义链接脚本实现自定义段功能 在ld链接过程中使用-T参数可以指定链接脚本,通过ld -verbose可以查看默认链接脚本,原文太长,这里简单截取了一部分: $...I:该符号另一个符号间接引用 N:debug符号 R:该符号位于只读数据区 T:该符号位于代码段 U:该符号在当前文件未定义,定义在别的文件中 ?

    1.2K30

    linux下 debug 工具 strace 应用之【查找命令依赖库文件】

    strace 可以记录系统调用次数,时间,成功和失败次数。 strace 可以跟踪发给进程信号。...strace 可以通过pid附加到任何正在运行进程上 问题背景: centos下执行rpm命令时提示缺失 libplds4.so 库文件,这导致系统命令执行失败 root@BJ-CentOS7 ~...使用 strace 命令追踪系统命令执行调用系统文件路径(参数 -e open 用于观察目前进程正引用哪些文件) root@BJ-CentOS7 ~ # strace -e open rpm -qa...| grep ssh open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/librpm.so.3", O_RDONLY|O_CLOEXEC...) = 3 open("/lib64/librpmio.so.3", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libselinux.so.1", O_RDONLY|O_CLOEXEC

    2.1K20

    Linux软件安装管理之--源码包安装

    此外,有的时候,我们会在程序当中“引用、呼叫”其他外部子程序,或者是利用其他软件提供“函数功能”,这个时候,我们就必须要在编译过程中,将该函式库加进来,如此一来,编译程序就可以将所有的程序代码与函式库作一个连结...,可以通过在 configure 后加上参数安装进行控制,你如代码:   ....注:由于源代码文件有时并非只有一个文件,所以无法直接进行编译,这个时候需要先产生目标文件,然后再连结制作成为 binary  可执行文件。...:执行程序根据更新后库信息调用库中函数或引用库中数据。...// 指向ld.so.conf.d目下所有*.conf配置文件 include ld.so.conf.d/*.conf [root@web ~]# ls /etc/ld.so.conf.d/

    3.3K51

    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.4K13

    头文件是必须吗?跟一跟编译过程~~~

    returned 1 exit status 报错说,未定义引用func()。...上面的ld是链接器,是一个可执行程序,它输入是一个或多个目标文件,如上面指令中main.o。 也就是说,目标文件main.o中引用了func(),但链接器找不到它定义。...显然,main.o中引用未定义func()被链接器在func.o中找到了。...即,链接器在面对一个目标文件时,如果碰到里面有未定义引用,会在其他目标文件中查找,如果找不到,则报错“undefined reference to”。如果找到有且仅有一个,则pass。...本文只是就着这个问题,跟了下编译过程,看看平常开发过程中遇到编译报错“未定义引用”、“未声明变量”这些错误来源是哪原因是什么。

    2K10
    领券