当前位置: 首页 > news >正文

网站建设是半年的持久战平面设计工作室创业计划书

网站建设是半年的持久战,平面设计工作室创业计划书,课程网站建设总体情况,如何让网站快速被收录1.动态链接库的使用 动态库支持以两种模式使用#xff0c;一种模式下#xff0c;在程序加载运行时#xff0c;完成动态链接。一种模式下#xff0c;在程序运行中#xff0c;完成动态链接。 1.1.程序加载运行时完成动态链接 我们通过一个实例介绍程序加载运行时#xff0c…1.动态链接库的使用 动态库支持以两种模式使用一种模式下在程序加载运行时完成动态链接。一种模式下在程序运行中完成动态链接。 1.1.程序加载运行时完成动态链接 我们通过一个实例介绍程序加载运行时使用动态库的方式 (1). 构建动态库 动态库源文件及makefile位于dynamic a.t1.cpp // t1.cpp int addcnt 0; void addvec(int *x, int *y, int *z, int n) {int i;addcnt;for (i 0; i n; i)z[i] x[i] y[i]; }b.t2.cpp // t2.cpp int mulcnt 0; void multvec(int *x, int *y, int *z, int n) {int i;mulcnt;for (i 0; i n; i)z[i] x[i] * y[i]; }c.makefile main: t1 t2 dynamict1:g -fpic -stdc11 t1.cpp -c t2:g -fpic -stdc11 t2.cpp -cdynamic:g -stdc11 -shared t1.o t2.o -o libt.soclean:rm *.o libt.so *.txtd.通过执行make完成构建。注意编译动态库源文件时需指定-fpic基于.o得到动态库需指定-shared。 (2).提供动态库导出符号声明文件 动态库导出符号声明文件放在include。 a.t.h #ifndef _T_H #define _T_H extern int addcnt; void multvec(int *x, int *y, int *z, int n); void addvec(int *x, int *y, int *z, int n); #endif上述除了导出函数我们还导出了变量addcnt。变量的声明需加上extern否则会被视为变量定义。 (3).主程序使用动态库导出符号 a.主程序为main.cpp #include stdio.h #include t.hint x[2] {1, 2}; int y[2] {3, 4}; int z[2];int main() {addvec(x, y, z, 2);printf(z[%d %d]\n, z[0], z[1]);printf(addcnt_%d\n, addcnt);return 0; }我们采用加载运行时完成动态链接方式使用动态库时在使用动态库导出符号时需要先声明符号。然后直接使用即可。 上述使用了动态库导出的addvecaddcnt。 b.构建可执行程序的makefile main:g main.cpp -stdc11 -I./include -L./dynamic -lt clean:rm a.out *.o *.txt我们采用加载运行时完成动态链接方式使用动态库时构建可执行程序时需通过-L -l来指定要链接的动态库的位置信息。-I用于指定编译期间头文件搜索路径。 (4).启动可执行程序 若上述编译完毕后我们直接在a.out所在目录通过命令行执行./a.out是不行的。 因为类似编译链接过程需通过-L -l来指定要链接的动态库的位置信息。加载运行时可以通过设置LD_LIBRARY_PATH来指定要链接的动态库的位置信息。上述结构下我们提供s.sh。 // s.sh export LD_LIBRARY_PATH$LD_LIBRARY_PATH:./dynamic ./a.out这样执行./s.sh即可正常启动。LD_LIBRARY_PATH用于在程序启动运行时告知搜索程序依赖的动态库的路径。 要查看可执行程序依赖那些动态库可使用ldd a.out。 1.2.程序运行期间完成动态链接 我们通过一个实例介绍程序运行期间使用动态库的方式。 (1). 构建动态库 和1.1部分相同。 (2).主程序中使用动态库导出符号 注意运行期间使用动态库时我们并不需要动态库导出符号声明文件。 因为使用导出符号的方式是通过dlsym直接取得导出符号地址后转换为相应类型后使用。 a.主程序为main.cpp 这里的main.cpp放置在demo下 #include iostream #include dlfcn.hint x[2] {1,2}; int y[2] {3,4}; int z[2];typedef void (*AddVec)(int*, int*, int*, int); int main() {void *handle;AddVec addvec nullptr;char *error;handle dlopen(libt.so, RTLD_LAZY);if(!handle){printf(%s\n, dlerror());return 0;}addvec (AddVec)dlsym(handle, addvec);if((error dlerror()) ! NULL){printf(%s\n, error);dlclose(handle);return 0;}int* addcnt (int*)dlsym(handle, addcnt);if((error dlerror()) ! NULL){printf(%s\n, error);dlclose(handle);return 0;}addvec(x, y, z, 2);printf(z [%d %d],cnt_%d\n, z[0], z[1], *addcnt);dlclose(handle);return 0; }我们采用运行期间完成动态链接的方式使用动态库在使用动态库导出符号时通过dlsym取得导出符号地址后转换为匹配类型后即可使用。上述使用了动态库导出的addvecaddcnt。 b.构建可执行程序的makefile makefile放置在demo。 main:g -stdc11 -rdynamic main.cpp -I../include -ldl clean:rm a.out *.o *.txt我们采用运行期间完成动态链接方式使用动态库时构建可执行程序时不需要通过-L -l来指定要链接的动态库的位置信息。因为编译链接过程尚未用到运行期间要链接的动态库。但需指定-rdynamic -ldl因为我们此时需要链接到服务于运行期间动态连接的动态库dl。 (3).启动可执行程序 类似的我们在启动前需通过LD_LIBRARY_PATH来指定dlopen中搜索动态库的路径信息。 我们的放置在demo下的s.sh为 export LD_LIBRARY_PATH$LD_LIBRARY_PATH:../dynamic ./a.out但执行./s.sh时报错了 因为我们采用c方式编译动态库时库内addvec的符号实际编译出的符号名称为 这是因为c编译器对编译时针对函数类型会结合其形参为其构建符号名称。c编译器不会。 c支持同名函数重载所以这样是需要的。c不支持同名函数重载所以不需要。 上述报错是因为我们通过dlsym取出addvec符号地址时通过名称addvec在动态库中找不到匹配的符号。 为了正常使用dlsym取得导出符号地址 (1).我们要么将dlsym传入的符号名修改为_Z6addvecPiS_S_i (2).要么通过设置使得c编译时针对addvec导出符号不要采用符号重新命名机制。我们只需在动态库源文件符号定义处添加extern C修饰即可。若我们采取了此种方式应该同步在类库导出符号声明文件中为addvec的声明也添加extern C修饰。这样1.1中使用动态库时也会直接采用addvec来在动态库中定位符号的定义位置。 针对变量类型导出符号如addcntc编译器不会对符号执行重新命名。所以直接使用符号名即可。 值得注意的是添加extern C后由于关闭结合形参重命名机制所以此时也就不允许同名符号重载了。 int addcnt 0; void addvec(int *x, int *y, int *z, int n) {int i;addcnt;for (i 0; i n; i)z[i] x[i] y[i]; }void addvec(int *x, int *y, int *z) {int i;i 0;i; }上述内容作为t1.cpp内容时可正常编译。 int addcnt 0; extern C void addvec(int *x, int *y, int *z, int n) {int i;addcnt;for (i 0; i n; i)z[i] x[i] y[i]; }extern C void addvec(int *x, int *y, int *z) {int i;i 0;i; } 上述内容作为t1.cpp内容时无法编译通过。因为存在同名符号问题。
http://www.zqtcl.cn/news/206175/

相关文章:

  • 有谁帮做网站网站建设seo合同书
  • 自己做视频网站只能用地址连接专业网站建设效果
  • 重庆网站建设价格费用酒店协会网站集静态模板
  • 会议专题网站建设报价单网站代码在哪里修改
  • 怎么用net123做网站怎么给企业制作网站
  • 网站建设合同模板网页设计团队
  • 做排行的网站淘宝流量平台
  • 用dw怎么做网站后台做一个网站需要怎么做
  • 沧州地区阿里巴巴做网站修改wordpress标题图片
  • 怎么判断网站开发语言互联网推广模式
  • 做电影网站被找版权问题怎么处理网站做的简单是什么意思
  • 九江网站建设网站制作深圳seo优化服务商
  • 上海网站推广珈维做映射后 内网无法通过域名访问网站
  • 太原网站关键词优化常州企业网站建设公司
  • 网站开发流程详细步骤不用淘宝客api如何做网站
  • xuzhou网站制作wordpress漫画小说
  • 公司建设网站的通知书百度经验官网入口
  • 如何做产品网站的推广静态网页制作总结
  • 网站建设有哪些知识点wordpress 静态
  • 买完阿里云域名如何做网站优化软件排行榜
  • 三五互联网站建设怎么样公司网上推广平台
  • 做网站网页的公司机械网站建设公司推荐
  • 影楼网站制作网站集群建设申请
  • 国内免费的短视频素材网站自己做网站的方法
  • jsp网站建设代码电子印章在线制作生成器免费
  • 叫别人做网站后怎么更改密码一手楼房可以做哪个网站
  • 网站上的图分辨率做多少网站栏目建设存在的问题
  • 山东省建设部网站官网php 开发手机网站建设
  • 新建的网站怎么做seo优化国内最新新闻事件今天
  • ss永久免费服务器河南网站建设优化技术