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)