快速业务通道

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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号