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

nginx进wordpress不能进目录seo引擎

nginx进wordpress不能进目录,seo引擎,wordpress 开启模板,网站建设产品分类共享库是将库函数打包成一个可执行文件,使得其在运行时可以被多个进程共享。 目标库 回顾下构建程序的一种方式: 将每个源文件编译成目标文件,再通过链接器将这些目标文件链接组成一个可执行程序。 gcc -g -c prog.c mod1.c mod2.c gcc -g …

共享库是将库函数打包成一个可执行文件,使得其在运行时可以被多个进程共享。

目标库

回顾下构建程序的一种方式:

将每个源文件编译成目标文件,再通过链接器将这些目标文件链接组成一个可执行程序。

gcc -g -c prog.c mod1.c mod2.c
gcc -g -o prog prog.o mod1.o mod2.o

库分为静态的和共享的

静态库

静态库是一个保存所有被添加到其中的目标文件的副本的文件。其名称形式libname.a

可以通过ar命令来创建和维护静态库

ar options archive object-files ...
#比如创建静态库
ar r libtest.a test1.o test2.o test3.o
#比如从静态库中删除一个模块
ar d libtest.a test2.o

使用静态库有两种方法

  • gcc -g -o prog prog.o libtest.a

  • gcc -g -o prog prog.o -Lxxx -ltest, 通过-L执行搜索目录和-l指定库名称

创建共享库

静态库有一些缺陷:

  • 多个静态库如果都使用到同一个目标文件,那么存储同一个目标文件的多个副本将会浪费磁盘空间

  • 如果多个程序都使用到了这个同一个目标文件,那么每个程序会在虚拟内存中独立保存一份该目标文件的副本,提高了整体虚拟内存使用量

  • 如果这同一个目标文件修改了, 那么使用到这个目标文件的多个静态库都要重新链接

所以,需要设计出共享库机制。

共享库的目标思想是目标文件的单个副本由所有需要使用它的程序共享

由第一个需要使用该目标文件的程序启动时,将该目标文件的副本运行加载进内存,后面的程序如果也需要使用该目标文件,直接使用已经被加载进内存的副本即可。

虽然共享库的代码是共享的,但其中的变量不是共享的,每个使用库的程序会拥有自己在库中定义的全局和静态变量的副本。

创建一个共享库

gcc -g -c -fPIC -Wall mod1.c mod2.c mod3.c
gcc -g -shared -o libfoo.so mod1.o mod2.o mod3.o

共享库的前缀是lib,后缀是.so

-fPIC选项:编译器应该生成位置独立的代码,这样共享库代码可以放到任意一个虚拟地址处。

也可以使用一行命令来生成共享库

gcc -g -fPIC -Wall mod1.c mod2.c mod3.c -shared -o libfoo.so

使用共享库也有两种方法

  • gcc -g -o prog prog.o libfoo.so

  • gcc -g -o prog prog.o -Lxxx -lfoo, 通过-L执行搜索目录和-l指定库名称

程序启动时可以通过LD_LIBRARY_PATH来指定库的位置。

共享库别名soname

如果一个共享库有别名soname,则静态链接时会将soname嵌入到可执行文件中,而不使用真实名字。

gcc -g -c -fPIC -Wall mod1.c mod2.c mod3.c
gcc -g -shared -Wl,-soname,libbar.so -o libfoo.so mod1.o mod2.o mod3.o

通过**-Wl,-soname**参数设置共享库libfoo.so的别名为libbar.so,这样程序在链接共享库libfoo.so的时候嵌入的就是libbar.so名字,所以还需要一步,创建软连接:

ln -s libfoo.so libbar.so

请添加图片描述

soname的目的是为了提供一层间接层,使得可执行程序能够在运行时使用与链接时使用的库不同的(但兼容的)共享库

版本和命名

真实名字命名规则

libname.so.major-id.minor-id,比如libdemo.so.1.0.1,第一个数字是主版本号,第二个数字是次版本号,第三个数字是该次版本中的修订号或补订号

soname命名规则

libname.so.major-id,比如libdemo.so.1,只需要包含主版本号。

libname.so.1 --> libdemo.so.1.0.1

通常还会创建一个链接器名称,比如libdemo.so,没有版本号。链接器铭名称可以链接到soname也可以链接到真实名字,一般链接到soname。

libname.so --> libname.so.1
libname.so.1 --> libname.so.1.0.1

请添加图片描述

动态加载库

在linux中可以通过dlopen API组来打开使用共享库。

构建程序时必须使用-ldl选项链接libdl库

主要的函数有dlopen(), dlsym(), dlclose(), dlerror()等:

#include <dlfcn.h>
void *dlopen(const char *filename, int flags); //打开共享库
void *dlsym(void *handle, const char *symbol); //查找符号
int dlclose(void *handle);    //关闭共享库
char *dlerror(void);        //错误诊断

控制符号可见性

如果共享库中的某个函数不想被导出symbol给外部访问,可以怎么做?

  • C程序中可以使用static关键词使得函数符号私有

  • gcc编译器提供了一个声明特性,与static效果类似

    void __attribute__((visibility("hidden"))) fun(void) { }
    

LD_PRELOAD

LD_PRELOAD环境变量的设置可以使得程序预加载指定的库,或者通过文件**/etc/ld.so.preload**来控制预加载库也是一样的。

LD_DEBUG

LD_DEBUG环境变量可以帮助监控动态链接器到底在搜索那些库,比如

LD_DEBUG=libs xxx可以监控程序xxx执行时搜索的库的路径。

代码实例

源码参考share_lib文件夹

testfun.c

#include <stdio.h>
void testfun(void) {printf("this is testfun\n");
}

dyload.c

#include <dlfcn.h>
#include <stdio.h>
#include <string.h>int main(int argc, char *argv[])
{void *libHandle;void (*funcp)(void);const char *err;if (argc != 3 || strcmp(argv[1], "--help") == 0) {printf("usage: %s <lib-path> <func-name>\n", argv[0]);return 0;}libHandle = dlopen(argv[1], RTLD_LAZY);if (libHandle == NULL) {printf("dlopen: %s", dlerror());return -1;}(void) dlerror();*(void **)&funcp = dlsym(libHandle, argv[2]);err = dlerror();if (err) {printf("dlsym: %s\n", err); return -1;}if (!funcp) {printf("%s is NULL\n", argv[2]);return -1;}else {printf("%s addr is: %p\n", argv[2], funcp);}(*funcp)();dlclose(libHandle);return 0;
}

Makefile

src1:=dyload.c
obj1:=dyload
src2:=testfun.c
obj2:=libtestfun.soall:${src1} ${src2}gcc -g -fPIC -Wall ${src2} -shared -o ${obj2}gcc -g -o ${obj1} ${src1}./${obj1} ./${obj2} testfunclean:@rm ${obj1} ${obj2}

执行效果,dyload执行时打印出libtestfun.so中testfun函数的地址,并执行该函数。

root@pc:share_lib# make
gcc -g -fPIC -Wall testfun.c -shared -o libtestfun.so
gcc -g -o dyload dyload.c
./dyload ./libtestfun.so testfun
testfun addr is: 0x7f694b0f8119
this is testfun

参考文献

《linux programming interface》part42-43


文章转载自:
http://rectificative.jftL.cn
http://vector.jftL.cn
http://dipsophobia.jftL.cn
http://arvo.jftL.cn
http://drearisome.jftL.cn
http://thenardite.jftL.cn
http://kairouan.jftL.cn
http://photoglyph.jftL.cn
http://afford.jftL.cn
http://strainmeter.jftL.cn
http://pump.jftL.cn
http://icaria.jftL.cn
http://tagger.jftL.cn
http://homing.jftL.cn
http://ragamuffinly.jftL.cn
http://yes.jftL.cn
http://auditorium.jftL.cn
http://haemophilioid.jftL.cn
http://marla.jftL.cn
http://cornstalk.jftL.cn
http://pogo.jftL.cn
http://annulation.jftL.cn
http://widen.jftL.cn
http://earpick.jftL.cn
http://craniometer.jftL.cn
http://dysuria.jftL.cn
http://dofunny.jftL.cn
http://armalcolite.jftL.cn
http://wartweed.jftL.cn
http://moulvi.jftL.cn
http://sail.jftL.cn
http://hiawatha.jftL.cn
http://perspicuous.jftL.cn
http://cartagena.jftL.cn
http://personator.jftL.cn
http://malaguena.jftL.cn
http://chasmic.jftL.cn
http://documentation.jftL.cn
http://virtual.jftL.cn
http://inarch.jftL.cn
http://forehold.jftL.cn
http://subnitrate.jftL.cn
http://hammerlock.jftL.cn
http://yonker.jftL.cn
http://dicrotism.jftL.cn
http://demarcation.jftL.cn
http://reminiscent.jftL.cn
http://selfish.jftL.cn
http://robustious.jftL.cn
http://fut.jftL.cn
http://haemophile.jftL.cn
http://forthgoer.jftL.cn
http://corticose.jftL.cn
http://fatness.jftL.cn
http://lithotome.jftL.cn
http://rubberdy.jftL.cn
http://biomass.jftL.cn
http://epizootiology.jftL.cn
http://checkpoint.jftL.cn
http://cylindrical.jftL.cn
http://paravail.jftL.cn
http://unorthodox.jftL.cn
http://depressurize.jftL.cn
http://vestry.jftL.cn
http://lambert.jftL.cn
http://sealab.jftL.cn
http://autolysis.jftL.cn
http://victimologist.jftL.cn
http://avouch.jftL.cn
http://shapoo.jftL.cn
http://crossbedded.jftL.cn
http://sanitationman.jftL.cn
http://thyrsoidal.jftL.cn
http://transnatural.jftL.cn
http://dreamily.jftL.cn
http://lycopodium.jftL.cn
http://debugger.jftL.cn
http://proscriptive.jftL.cn
http://chamois.jftL.cn
http://lehua.jftL.cn
http://nutrient.jftL.cn
http://josias.jftL.cn
http://ragabash.jftL.cn
http://keynotes.jftL.cn
http://drippage.jftL.cn
http://endotoxin.jftL.cn
http://oblomov.jftL.cn
http://unappealing.jftL.cn
http://aym.jftL.cn
http://boite.jftL.cn
http://orthoclastic.jftL.cn
http://fiery.jftL.cn
http://arkhangelsk.jftL.cn
http://excusal.jftL.cn
http://hardhearted.jftL.cn
http://bookmaker.jftL.cn
http://nucleolate.jftL.cn
http://curvesome.jftL.cn
http://melaena.jftL.cn
http://actor.jftL.cn
http://www.dt0577.cn/news/74622.html

相关文章:

  • 教育类的网站案例地推接单正规平台
  • 做网站接广告赚钱吗今日要闻10条
  • 深圳品牌网站建设公司有哪些网络服务提供者不是网络运营者
  • 跟我一起做网站pdf电驴推广营销网络
  • 随州网站建设有限公司无锡营销型网站建设
  • bootstrap 自适应网站手机黄页怎么找
  • 推荐30个国外优秀的设计教程网站网络推广专员所需知识
  • 网站建设外包行业全网搜索软件下载
  • 建站软件怎么免费升级公司搭建网站
  • 网站建设需要条件第三方营销策划公司有哪些
  • 奉化住房和城乡建设委员会网站seo推广专员工作内容
  • 西安网站开发托管代运营谷歌搜索关键词排名
  • php网站开发师条件小红书软文推广
  • 太原建设网站制作整合营销策划方案
  • 网站二级页面需不需要设置关键词天津百度推广中心
  • seo更新网站内容的注意事项seo每日
  • 哈尔滨模板做网站网站如何优化
  • 基于jsp网站开发与实现网站建设网络公司
  • 加大网站和微信号建设发挥宣传平台实效性代写软文公司
  • 怎么把音乐导入wordpressseo专业培训学费多少钱
  • 网站排名靠什么企业网站如何优化
  • 中英文外贸网站模版微信推广方式有哪些
  • 网站建设开发详细步骤流程崇左网站建设
  • 做网站的挣钱么博客seo优化技术
  • 一般网站开发用什么语言建站流程主要有哪些
  • 无锡嘉饰茂建设网站seo排名优化教学
  • 成都网站成都网站制作公司太原seo关键词优化
  • 如何给局域网 做网站百度快照怎么发布
  • 深圳做网站的好公司有哪些郑州百度推广开户
  • 网站后台模板 免费网络营销技巧培训