免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2427 | 回复: 2
打印 上一主题 下一主题

[Linux] 为什么我总也链接不到自己编译出的glib库? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-06-29 18:30 |只看该作者 |倒序浏览
我编译了glib库(注:不是glibc库),但不知为什么测试程序总链接不到这个glib库。
下面是我的编译环境及操作步骤,请大神们帮看下我这是在哪里出了差错。

linux版本:
[root@centos66x32 glib_demo]# uname -a
Linux centos66x32 2.6.32.67 #2 SMP Mon Dec 28 10:14:38 CST 2015 i686 i686 i386 GNU/Linux

测试代码目录:
[root@centos66x32 glib_demo]# l
main.c  test*  main.o  Makefile

main函数代码只调用了glib的g_printf函数
[root@centos66x32 glib_demo]# cat main.c
#include <glib.h>

int main(int argc, char** argv)
{
    g_printf("%s \n", glib_check_version(0,0,0));
    return 0;
}

在Makefile链接时指定了我编译的libglib-2.0的目录
[root@centos66x32 glib_demo]# cat Makefile
test: main.o
        gcc -o test main.o -I/usr/local/include/glib-2.0  -I/usr/local/lib/glib-2.0/include -L/usr/local/lib -lglib-2.0
main.o: main.c
        gcc -c main.c -o main.o -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include   -L/usr/local/lib -lglib-2.0
clean:
        rm -rf test main.o

make编译出来的可执行文件,libglib-2.0库仍然链接操作系统自带的,我期望是链接我自己编译出的库啦
[root@centos66x32 glib_demo]# ldd test
        linux-gate.so.1 =>  (0xb77f8000)
        libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0x00363000)
        libc.so.6 => /lib/libc.so.6 (0x0015a000)
        librt.so.1 => /lib/librt.so.1 (0x00316000)
        /lib/ld-linux.so.2 (0x00134000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x002f2000)

我编译出的glib库,可以看到也有libglib-2.0.so.0的
[root@centos66x32 glib_demo]# ll /usr/local/lib/libglib*
-rwxr-xr-x 1 root root  972 6月  29 17:52 /usr/local/lib/libglib-2.0.la
lrwxrwxrwx 1 root root   23 6月  29 17:52 /usr/local/lib/libglib-2.0.so -> libglib-2.0.so.0.4800.1
lrwxrwxrwx 1 root root   23 6月  29 17:52 /usr/local/lib/libglib-2.0.so.0 -> libglib-2.0.so.0.4800.1
-rwxr-xr-x 1 root root 2.9M 6月  29 17:52 /usr/local/lib/libglib-2.0.so.0.4800.1
-rw-r--r-- 1 root root 3.8M 6月  29 08:12 /usr/local/lib/libglib-2.0.a

=================
为了防止和系统原有的glib库冲突,我对自己编译的库重新命了名,由libglib-2.0修改为libglibzzz-2.0
修改makefile,链接重命名后的库 -lglibzzz-2.0
编译出来的可执行程序,竟仍然链接系统的glib库,这下更加疑惑了。

[root@centos66x32 glib_demo]# make
gcc -c main.c -o main.o -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include   -L/usr/local/lib -lglibzzz-2.0
gcc -o test main.o -I/usr/local/include/glib-2.0  -I/usr/local/lib/glib-2.0/include -L/usr/local/lib -lglibzzz-2.0
[root@centos66x32 glib_demo]# ll test
-rwxr-xr-x 1 root root 5.0K 6月  29 18:17 test
[root@centos66x32 glib_demo]# ldd test
        linux-gate.so.1 =>  (0xb77d6000)
        libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0x00363000)
        libc.so.6 => /lib/libc.so.6 (0x0015a000)
        librt.so.1 => /lib/librt.so.1 (0x00316000)
        /lib/ld-linux.so.2 (0x00134000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x002f2000)
[root@centos66x32 glib_demo]#

为了防止系统找不到共享库路径,我连LD_LIBRARY_PATH都修改了,仍链接系统自带的glib库,奇怪得很哩很。。。
[root@centos66x32 glib_demo]# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
[root@centos66x32 glib_demo]# make clean
rm -rf test main.o
[root@centos66x32 glib_demo]# make
gcc -c main.c -o main.o -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include   -L/usr/local/lib -lglibzzz-2.0
gcc -o test main.o -I/usr/local/include/glib-2.0  -I/usr/local/lib/glib-2.0/include -L/usr/local/lib -lglibzzz-2.0
[root@centos66x32 glib_demo]# ldd test
        linux-gate.so.1 =>  (0xb7799000)
        libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0x00363000)
        libc.so.6 => /lib/libc.so.6 (0x0015a000)
        librt.so.1 => /lib/librt.so.1 (0x00316000)
        /lib/ld-linux.so.2 (0x00134000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x002f2000)
[root@centos66x32 glib_demo]#

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2016-06-30 20:47 |只看该作者
回复 1# fielding_st


    把 /usr/local/lib 放到 LD_LIBRARY_PATH 的开头再试验一下。

论坛徽章:
0
3 [报告]
发表于 2016-07-06 10:14 |只看该作者
试了一下,还是不行。回复 2# MMMIX


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP