Linux下编译及调用库函数的方法 下载本文

Linux下编译及调用库函数的方法

? 文件说明

此demo有两个工程目录:libtest和uselibtest libtest:lib库编译目录,生成libtest.so文件 uselibtest:应用程序,生成test可执行文件

? 编译库文件

1) 进入libtest目录 2) 键入:

g++ test_a.cpp test_b.cpp test_c.cpp -fPIC -shared -o libtest.so 3) 生成libtest.so文件

? 编译可执行文件

进入uselibtest目录 键入: make

在debug和release目录下分别生成uselibtestd和uselibtest文件,这是debug和release版本的可执行文件

备注:在Makefile文件中可注明需要链接的库文件 2. 查看库文件是否能够找到 进入debug目录 键入:

ldd uselibtestd 显示如下:

libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00a0a000) libtest.so => not found

libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x001f8000) libm.so.6 => /lib/tls/libm.so.6 (0x0090c000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x002ef000) libc.so.6 => /lib/tls/libc.so.6 (0x002f7000) /lib/ld-linux.so.2 (0x007c2000) 说明库文件路径不正确 键入:

vi /etc/ld.so.conf

按下键盘上的Insert修改文件。

在文件最后一行加入:/mnt/hgfs/share4linux/basic_demo/uselibtest 修改后的文件为:

include ld.so.conf.d/*.conf /usr/X11R6/lib

/mnt/hgfs/share4linux/basic_demo/uselibtest 按下Esc键退出编辑状态。 键入”:wq”保存退出

键入”ldconfig”启动刚才的设置,若显示找不到ldconfig这个命令,可使用”/sbin/ldconfig”来达到同样的目的。 键入:

ldd uselibtestd 显示如下:

libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00a0a000)

libtest.so => /mnt/hgfs/share4linux/basic_demo/uselibtest/libtest.so (0x00870000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x001f8000) libm.so.6 => /lib/tls/libm.so.6 (0x0090c000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x002ef000) libc.so.6 => /lib/tls/libc.so.6 (0x002f7000) /lib/ld-linux.so.2 (0x007c2000) 此时so文件已经找到。

libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00a0a000) libtest.so => not found

libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x001f8000) libm.so.6 => /lib/tls/libm.so.6 (0x0090c000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x002ef000) libc.so.6 => /lib/tls/libc.so.6 (0x002f7000) /lib/ld-linux.so.2 (0x007c2000)