大连网站制作优选ls15227,会昌县 两学一做 网站,佛山抖音seo,所谓网页制作三剑客不包括最近正在学习库的用法#xff0c;写了最基础的libmystring.a的库(里面只有一个add函数)#xff0c;然后编写test程序测试add函数#xff0c;用ar命令创建好libmystring.a库后#xff0c;用以下命令编译静态连接的a.outgcc –static test.c –L ./ –lmystring –o a.out得到…最近正在学习库的用法写了最基础的libmystring.a的库(里面只有一个add函数)然后编写test程序测试add函数用ar命令创建好libmystring.a库后用以下命令编译静态连接的a.outgcc –static test.c –L ./ –lmystring –o a.out得到静态连接的a.out./a.out后得到想要的结果然后 rm a.outgcc test.c –L ./ –lmystring –o a.out得到动态连接的a.out./a.out后得到想要的结果最后把libmystring.a删掉再./a.out 想象中是不是应该报“找不到XX库的错误”什么之类的但结果却还是正确的运行输出相应的结果。。。。这是为什么呢 不是说动态连接的文件在运行的时候需要依赖库文件吗 是我哪里理解错了呢高手指教下如下是测试例子(已经删除了.a库文件运行a.out后还是输出正确的结果)gfsubuntu:~/study/lib$ lsa.out mystring.c mystring.h mystring.o test.cgfsubuntu:~/study/lib$ file a.outa.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not strippedgfsubuntu:~/study/lib$ ./a.outadd9|因为你给他的本来就是一个静态库。静态库有静态库的用法静态库是直接打包编译的。你可以去看看如何使用动态库。这里他发现你给他的是一个静态库他会把他打包编译到可执行文件中以后的运行都不依赖你给他的库文件了|LZ,你需要去看看库文件的原理以及运作方式。其实你加不加-static,结果都是一样的。按照库文件的工作原理他会先去搜索动态库文件也即是.so结尾的库文件当他找不到动态的(.so文件)的时候他就会去找静态的库文件也就是.a结尾的文件。你这个地方没什么问题其实就是库文件找不到动态库了他就去找静态库一旦找到他就工作了|ar生成的libmysring.a是静态库.gcc -shared -o libmstring.so mystring.o生成的才是动态库。gcc test.c –L ./ –lmystring –o a.out会优先链接动态库如果没有就用静态库。|你给他一个静态库他就会用静态方式去连接编译打包。他不会把你的静态库转换成动态库的。这个是原则。|LZ这样给你说你给他吃什么他就吃什么。动态连接来说他是通吃的。只要你不是在程序中用代码使用动态库。像你调用函数这种不加static,他都可以吃的。但是惟独动态的.so的时候-static他吃不了。因为你的static已经限定了你只能给我吃静态的 动态的他就不能吃。如此。。以用-static的时候给他喂一个.so的他当然要拒绝了|很多库同时带静态(.a)和动态(.so)文件而且放在同一个目录下这个时候就需要-static指定用静态库否则永远会优先使用动态库。|-static...就是让你静态打包编译啊,很多情况下你会发现一个库文件他既有动态库也有静态库。为了不依赖平台我-static当然就不会去使用.so了不管你有没有动态库方正我就只需要你的静态库就ok你可以在/lib下看看很多库都是动态静态都有的。