linux用c 调用动态库
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-04-19
1.3 用c 静态方式调用动态库libsthc.so:
/*cpptest.cc*/ //linux下的c 后缀有cc,cxx, cpp
#include "libsthc.h"
using namespace std; //std命名空间
用 .h 的头文件,就不用 using namespace std 用 没有 .h 的头文件,就 用 using namespace std 例如: #include <iostream.h> #include <string.h> 不用 ----------------------------- 例如: #include <iostream> #include <string> using namespace std; 用 ----------------------------- using namespace std; 是 "用命名空间中的定义". std 是 空间 名,“标准”的意思. 现在一般推荐用 无 .h 的 头文件,写using ... int main(void) { printf("%d\n", add(1, 2)); return 0; } #makefile: cpptest:cpptest.o g cpptest.o –o cpptest -lsthc //-lsthc库文件,缺省路径在/usr/lib,对于其他路径例如:-L /usr/local/lib -lsthc cpptest.o:cpptest.cc g -c cpptest.cc -Wno-deprecated -o cpptest.o //-Wno-deprecated 对废弃的特性不予警告 all:cpptest clean: rm -f *.o cpptest 1.4 用c 动态方式调用动态库libsthc.so: /*cppdltest.cpp*/ #include "stdio.h" #include "stdlib.h" #include "dlfcn.h" //也是用的这个文件,和c一样 int main(void) { void *handle; int (*fcn)(int x, int y); const char *errmsg; /* open the library */ handle = dlopen("libsthc.so", RTLD_NOW); if(handle == NULL) { fprintf(stderr, "Failed to load libsthc.so: %s\n", dlerror()); return 1; } dlerror(); *(void **)(&fcn) = dlsym(handle, "add"); //ok //fcn = dlsym(handle, "add"); //not ok in c if((errmsg = dlerror()) != NULL) { printf("%s\n", errmsg); return 1; } printf("%d\n", fcn(1, 5)); dlclose(handle); return 0; } #makefile cppdltest:cppdltest.o g cppdltest.o -ldl -lsthc -o cppdltest cppdltest.o:cppdltest.cpp g -c cppdltest.cpp -o cppdltest.o all:cppdltest clean: rm -f *.o cppdltest 拥有帝国一切,皆有可能。欢迎访问phome.net 拥有帝国一切,皆有可能。欢迎访问phome.net |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: LINUX服务器下NFS服务器下一篇: 图文并茂
关于linux用c 调用动态库的所有评论