windows下动态库,如何在linux下布置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows下动态库,如何在linux下布置相关的知识,希望对你有一定的参考价值。
参考技术A 您好,在Linux下布置Windows动态库的方法如下:1. 首先,您需要准备一个Windows动态库,可以是一个dll文件,也可以是一个lib文件,这取决于您的需求。
2. 然后,您需要在Linux下安装一个Windows动态库的解释器,比如Wine,它可以帮助您在Linux下运行Windows程序。
3. 接下来,您需要将Windows动态库复制到Linux系统中,并将其路径添加到Linux系统的环境变量中,以便程序能够正确调用该库。
4. 最后,您需要使用Linux系统自带的编译器,比如GCC,将Windows动态库编译成Linux可以识别的格式,以便程序能够正确调用该库。
以上就是在Linux下布置Windows动态库的方法,希望能够帮助您解决问题。
Linux下如何解决动态库的链接问题
关于动态库和静态库,这里不多解释,如何创建属于自己的动态库和静态库,之前有提过,详细内容戳链接。
静态库是一种以空间换取时间和移植性的做法,一些情况下确实有着一定的意义,但是一些情况下,我们自己编写的简单项目,在绝大多数的机器上不存在移植性问题,是没有必要采用静态编译的。而且,在一些大型项目中,我们很难避免去使用到开源库,举个例子,如果我们只是单纯引用了mysql数据库的几个接口,有必要将整个mysql源文件全部编译吗?代价未免太大。通常的做法,是将mysql的include
和lib目录打包之后,一起进行发布,来增强可移植性,也就是今天这里说的动态编译。
但是,动态编译默认情况下,只会去系统默认指定的目录下进行查找lib***.so文件,甚至我们在Makefile中使用-L选项指明了LIB目录,编译不会出错,但在运行的时候,会出现下面这种报错:
./cgi_select: error while loading shared libraries: libmysqlclient.so.18:
cannot open shared object file: No such file or directory
解决这个问题,网上给出的方法挺多,这里不会全部列出,给出最常用的方法:
1、环境变量。使用export导入环境变量LD_LIBRARY_PATH,指明搜索路径。这个环境变量是临时指定动态库的搜索路径,是绑定终端的,至于什么原因,了解过Linux的同学应该知道,这里不多解释,为了说明问题,这里截图给出,具体用法如下:
再次说明,这种做法只是临时生效,在测试的时候为了方便可以使用,但是真正的项目发布,一般不会使用这种做法,因为需要在客户机器上创建环境变量之后才可以运行,我尝试了多种做法,想把命令放到脚本当中自动化去执行,但限于个人能力,尚未跨越子shell这一关。
2、第二种做法就显得更加有效。在/etc/ld.so.conf文件中,指明了动态库的搜索路径,一般请款下,文件内容为
include ld.so.conf.d/*.conf
表明,/etc/ld.so.conf.d目录下的所有*.conf文件中保存的都是动态库的搜索路径。这么说可能不太好理解,进入目录,随意打开一个文件,你就会明白,每个文件中只有一条或几条路径,如下:
[[email protected] ld.so.conf.d]# cat qt-i386.conf
/usr/lib/qt-3.3/lib
[[email protected] ld.so.conf.d]# cat mysql-i386.conf
/usr/lib/mysql
每一个工具的动态库,都有着自己的动态库路径,因此,我们可以在该目录下创建自己的*.conf文件,文件中保存自己指定的动态库路径即可,个人绝对,Linux对动态库搜索路径的封装做的真心不错。
当然更改其他*.conf文件或创建自己的动态库连接目录配置文件后,需要使用ldconfig命令使之生效。
[[email protected] ld.so.conf.d]# ldconfig
3、其他的做法就是一些很非主流的做法了,将你所需要的动态库文件直接放入系统默认路径,坦白讲,这样做法没有问题,但是这是在给自己埋地雷,迟早有一天会出大问题。
4、另外还有一种比较生僻的做法,但是开源工程中会用到。使用gcc的选项确实可以实现,-Wl -rpath指定路径,个人来说,很少使用这种做法,gcc/g++是一款很强大的编译工具,提供了上百个选项,有一大部分可能一辈子用不到,用到去查就可以了,没有必要太过深究。
-----muhuizz整理
本文出自 “暮回” 博客,请务必保留此出处http://muhuizz.blog.51cto.com/11321490/1927864
以上是关于windows下动态库,如何在linux下布置的主要内容,如果未能解决你的问题,请参考以下文章
动态库与静态库的区别在windows及linux环境下的制作及用法