linux下编译自己的库文件实践
文件,比如libfunc.so,可以在cc命令加上-lfunc,还要视情况加上 -L/usr/xxx 指出libfunc.so的路径;这样,在你要编译的源文件中就可以调用libfunc.so这个库文件的函数.
4.动态加载 [root@localhost sharelib2]# ls libtest.so Makefile so_test.h test test_a.c test_b.c test.c test_c.c [root@localhost sharelib2]# vim dynamic.c [root@localhost sharelib2]# cat dynamic.c #include <stdio.h> #include <dlfcn.h> #include <stdlib.h> typedef void (*simple_demo_funct)(void); int main() { const char * error; void * module; simple_demo_funct demo_function; module = dlopen("libtest.so",RTLD_LAZY); if(!module) { printf("Could not open libtest.so:%sn",dlerror()); exit(1); } dlerror(); demo_function = dlsym(module, "test_a"); if((error = dlerror()) != NULL) { printf("Couldn''t find test_a:%sn",error); exit(1); } (*demo_function)(); dlclose(module); return 0; } [root@localhost sharelib2]# gcc -Wall -g -c dynamic.c [root@localhost sharelib2]# ls dynamic.c libtest.so so_test.h test_a.c test.c dynamic.o Makefile test test_b.c test_c.c [root@localhost sharelib2]# gcc -g -o dynamic dynamic.o -ldl [root@localhost sharelib2]# ls dynamic dynamic.o Makefile test test_b.c test_c.c dynamic.c libtest.so so_test.h test_a.c test.c [root@localhost sharelib2]# ldd dynamic linux-gate.so.1 => (0x00a87000) libdl.so.2 => /lib/libdl.so.2 (0x00c41000) libc.so.6 => /lib/libc.so.6 (0x00ad9000) /lib/ld-linux.so.2 (0x00abc000) [root@localhost sharelib2]# ./dynamic This is in test_a... [root@localhost sharelib2]# |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |