文件2.h
文件2.c
-
#include <stdio.h>
-
-
int gohell()
-
{
-
printf("go hell!\n");
-
return (0);
-
}
文件1.c
-
#include <stdio.h>
-
#include "2.h"
-
-
int main()
-
{
-
gohell();
-
-
return 0;
-
-
}
-
动态库
-
gcc -fPIC -shared -o libtest2.so 2.c
a.out
-
gcc 1.c -o a.out /usr/local/src/libtest2.so
运行命令ldd a.out:
-
xx@shit:/usr/local/src$ ldd a.out
-
linux-gate.so.1 => (0xb77de000)
-
/usr/local/src/lib_2.so (给出的是动态库的绝对路径)
这时候你
把a.out和libtest2.so拷贝到其他板子上,并把libtest2.so放到/lib目录下,运行a.out的话就会出现一下错误:
-
./a.out: error while loading shared libraries: /usr/local/src/libtest2.so: cannot open shared object file: No such file or directory
因为其他板上的/usr/local/src/目录下没有libtest2.so文件,笨方法就是把libtest2.so放到板子的/usr/local/src目录下。
比较好的方法就是编译a.out,动态库不用绝对路径用相对路径。
-
gcc 1.c -o a.out -L./ -ltest2
运行命令ldd a.out:
-
xx@shit:/usr/local/src$ ldd a.out
-
linux-gate.so.1 => (0xb7724000)
-
libtest2.so => not found
-
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7557000)
-
/lib/ld-linux.so.2 (0xb7725000)
这时你
把a.out和libtest2.so拷贝到其他板子上,并把libtest2.so放到/lib目录下,程序运行会自动到/lib目录下找到libtest2.so文件,不会报错。
还有就是通过ldconfig命令,更新ld.conf.cache来让程序在给定目录下查询动态链接库文件。
阅读(853) | 评论(0) | 转发(0) |