之前在网上看到的教程大多数是把dll直接丢到system32/syswow64了事,倒也是可以成功的,早期更关注尽快上手代码,所以对配置本身这件事并不是很在意。
随着写过的项目数目的增加,需要配置的东西也越来越多,也经常为了一些功能需要到网上找各种各样的库,在各种踩坑的经历中,也大概对配置有了一点了解。
配置文件
对于一般的编译好的源码,会包含以下几个部分:
- 头文件(include) 用于函数的声明,可以在头文件中查看有哪些函数。
- 链接文件(lib) 用于编译时的连接,找到dll中函数的位置。
- 动态链接文件(dll) 用于函数的定义。
发布可执行文件
一般不需要lib,但要把项目用到的所有dll放到特定文件夹下。
项目中一些小图标可以直接编译到exe内部,不需要随着项目一起发布。
在有必要的时候,我们还需要把自己的项目打包成lib,include,dll
注意事项
(1)x64 还是 x86 (win32)?
请注意你配置的库是x64还是x86的,并把项目属性选择成和它一样的。
(2)debug 还是 release ?
区分release和debug版的库,一般来说debug的库结尾会有一个d,而release没有。因为带了很多调试信息,debug的库会很大,正式发布请使用release。
作为printf debug党,一般都是直接配置成release。
(3)mingw(gcc),......,vc11,vc12,vc13,cv14
你用的哪种编译器,要对应哪种类型的库。如果不匹配的话,能够考虑的解决方案是:
- 自己重新编译一下库(如果是开源的)
- 换一个匹配的编译器
可移植项目配置
在多人合作项目中,为了使得项目移植到别的电脑可以直接运行,而不需要重新修改配置,我们就不能用暴力丢到系统库或者用绝对路径一键导入这种方法。
以OpenCV3.1为例,我使用的版本是vs2015,编译器为vc14,x86架构,release版。
先在项目下建一堆文件夹。
把你需要的东西丢到对应的文件夹,因为我不知道自己可能用到哪些库,就把所有没有d的都扔进来了,示例如下:
点击vs菜单栏的 项目 - 属性 :
点开“包含目录”
输入$(ProjectDir) 代表当前项目目录,在后面加上具体的文件夹名,下面会计算出绝对路径。
其余的配置是类似的,其中:
- VC++目录 - 包含目录 - include
- VC++目录 - 库目录 - lib
- 调试 - 环境 - dll
![](https://i-blog.csdnimg.cn/blog_migrate/1339d06e4cc24e0a43dabe060f8df58b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b5b9b77b437e12d721de2e0723bdfbf8.png)