小例子:
源文件:foo.c
#include<stdio.h>
void foo()
{
printf("infoo\n");
}
test1.c
#include <stdio.h>
#include <unistd.h>
extern void foo(void); // 避免extern 懒得写.h
int main(int argc, char * argv[])
{
loop:
foo();
sleep(1);
goto loop;
return 0;
}
下面是步骤:
1、编译出so文件
gcc foo.c -fPIC -shared -o libtest.so
参数-fPIC表示编译出地址无关的代码,其实so文件就是地址无关的。但是显示的写上是个好习惯,所有硬件都可以支持。
2.编译出可执行稳健
gcc test1.c -L. -ltest -o test1
-L.参数表示在当前目录寻找so文件,编译参数 “-ltest”指定编译器连接库文件 libtest.so(看来so文件必须以lib打头)
3、设置加载so的环境变量
export LD_LIBRARY_PATH= p w d : {pwd}: