使用指定glibc编译程序

记录glibc编译失败经历

https://blog.csdn.net/jefbai/article/details/47842829

本文链接:https://blog.csdn.net/jefbai/article/details/47842829
glibc是Linux系统非常重要的组件,所有的可执行文件都依赖动态库libc.so.6,在x86_64系统下是/lib64/libc.so.6=>libc-[glibc-version].so,今天想升级glibc到glibc-2.22,然后按照网上给出的方法configure&&make && make install到了一个另外的目录/opt/glibc,但是坑爹的是我想测试下,就直接把/etc/ld.so.conf文件修改了!!!!!
修改了!!结果就是系统挂了!!除非是进入到内存文件系统,然后挂载硬盘的根文件系统,删除掉多的这一行!!哎~~~~

竟然忘了动态库的搜索路径,如下:

用户指定的路径-L
LD_LIBRARY_PATH目录的路径
/etc/ld.so.conf中设置的路径/etc/ld.so.cache,不确定正确性千万不要改这个!!!
/lib64
/usr/lib64
附注:
关于如何正确使用指定版本的glic来编译程序
http://stackoverflow.com/questions/13668457/vdso-time-missing-from-core-utils
http://stackoverflow.com/questions/847179/multiple-glibc-libraries-on-a-single-host/851229#851229
 

 

 

 

使用指定glibc编译程序

https://blog.csdn.net/jefbai/article/details/47859335

 

有时候我们需要测试不同的glibc的性能,此时可以使用如下命令来指定动态库加载器和glibc,

 g++ test_log.c -Wl,--rpath=/usr/local/lib -Wl,--dynamic-linker=/usr/local/lib/ld-linux-x86-64.so.2 
  • 1

其中/usr/local/lib为glibc动态库的路径,linker为动态装载器
以下test_log.c代码为例

/*
 *  learn for syslog/openlog 
 *
 *
 * */
#include <syslog.h>
#include <stdio.h>
#include <stdlib.h>


int main(int argc,char **argv)
{
    //check the argc,usage e.g. ./a.out filename 
    if(argc != 2){
        perror("argc != 2");
        exit(1);    
    }
    openlog(argv[0],LOG_PID | LOG_NOWAIT | LOG_NDELAY,LOG_USER);

    syslog(LOG_INFO,"%s","hello,world");
    closelog();
}

使用上述命令编译后,可以用/usr/bin/ldd查看a.out依赖的动态库

[jefby@localhost work]$ /usr/bin/ldd a.out 
    linux-vdso.so.1 =>  (0x00007fff3d9ff000)
    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003c67400000)
    libm.so.6 => /usr/local/lib/libm.so.6 (0x00007fdf9bc5c000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003c67000000)
    libc.so.6 => /usr/local/lib/libc.so.6 (0x00007fdf9b8b8000)
    /usr/local/lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x0000003c5a000000)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

说明已经替换成功,运行

./a.out jefby
  • 1

然后使用tail来查看是否成功写入系统日志中

sudo tail /var/log/messages
  • 1

如下所示,可以看到已经成功写入:

[jefby@localhost work]$ ./a.out jefby
[jefby@localhost work]$ sudo tail /var/log/messages -n 1
Aug 22 14:30:02 localhost ./a.out[12965]: hello,world
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值