- 论坛徽章:
- 0
|
我编译了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]# |
|