在vs2013上使用libconfig

libconfig简述

这是一个可以格式化读取/写入.cfg文件的库。
库的github地址如下
https://github.com/hyperrealm/libconfig/tree/e32f102ebdf10874d98d5309cf6016fea81e6ebe

遇到的问题和解决方案

根据经验 一般把源代码下载下来之后,编译出一个lib 然后把头文件拷贝走就行了
于是我打开了源工程中的lib文件夹,新建了一个项目,把lib文件夹下的文件include过来,然后编译一下。之后就是范例,把生成的lib放到vs安装目录的lib文件夹,把h文件放到include文件夹,然后就可以开始开心的使用啦。
按着以上的描述,就诞生了以下的问题:链接错误,无法解析的符号

  1. 多个项目同时编译没有问题,但是单独编译就出现了问题
    从下图中可以看到,报错提示:link error 没有办法解析外部符号
    翻译一下就是,主函数引用的东西没有找到。如果是引用另一个c文件的函数,如果没有找到的话,在编辑的时候就会提醒我们,函数没有定义,再加上红色波浪线的提示,这种错误是很少犯的。
    \color{red}{这种一般是由于lib 或者dll没有找到导致的错误!!!}
    两个项目同时编译没有问题
单独编译报错

---------------------分割线----------------------------
不过一开始遇到这个问题的时候,我没有意识到是因为缺少dll的原因。认为是我编译的lib和我在网上抄的代码版本不一样,更改了API,所以出现无法解析的符号。
于是我疯狂google如何把libconfig编译成lib.......一无所获

原本的文件里面是存在sln文件的,只有vs2017版和vs2008版,我用vs2013凑合着打开了。。。
尝试着直接编译,遇到了几个因为vs版本的原因导致的bug,解决之后,居然,编译通过了???

  1. vs2013不支持标准C???
    是这样的。。。我一般会推荐大家使用VS2013,因为各种开源库都有比如OpenCV,Qt都可以在VS2013上运行,但是VS2013毕竟是一个很老的编译器啦,所以跟不上当前标准C++是正常的。。。但是MS提供了一些函数进行取代。用宏定义#define就可以修正。


    vs2013不支持标准c,所以魔改一下

----------------------分割线---------------------
这是我第一次见到一个sln文件里面包含了10多个项目的,一次编译全部都可以生成有用的东西比如dll、lib、exe等等,居然正确运行了???10多个项目里面有libconfig的功能源码和一些测试代码。
所以我尝试着把libconfig的功能源码和测试代码分开编译,果不其然,没有功能代码的那部分报错了。
我调试了一下没有分开的代码,不小心改掉了dll的名称,报错,打不开dll。
\color{red}{这时候我才意识过来,这个库运行在dll上,不在lib上。}
于是我把原来的文件复制了很多份拷贝,观察什么才是测试文件编译时的关键文件,得到的结论是可以找到的lib文件和可以找到的dll文件。
最后的时候遇到了一点小插曲。

  1. release版本和debug版本 需要的dll不一样
    在我的另一篇文章里面提到过编译lib的时候要debug和release都编译一下,但是我在测试的过程中反而没有感觉到有影响。但是这次编译出来的还有dll,debug版使用release版的dll,报错了...
    //www.greatytc.com/p/fa89d74ed7b1
release版本的lib和dll在小部分情况下不可以给debug模式的程序使用

资源提取

最后奉上我亲手编译好的dll,lib和demo文件
https://pan.baidu.com/s/1El7cm4yuX9P9Cafq0TN31A
提取码: 6gr8
修改过,可以直接在vs2013里面打开的工程(右键libconfig_vs2008.sln,使用vs2013打开)如下

如何安装dll lib请见我另一篇文章//www.greatytc.com/p/fa89d74ed7b1
温馨提示最好把vs2013安装目录的bin文件夹加入path,这样就不会找不到dll了。

吐槽一下

Python大法好。
之前一直觉得是Python内置很多高效方便的数据结构,所以写起程序来很高效很爽。不过大三的时候,被迫写了半年的C++,觉得C++有了模板之后,也简单了不少,写C++程序也能享受所有事情都在自己掌握中的快感。
但是自从入了OpenCV的坑之后,我就开始不断的在VS2013上安装各种各样的库...
虽然每次都比之前更加的熟练,但是还是累的死去活来的,尤其是像本文这种小众的库,找不到什么资料,只能自己开始摸索。
Python呢,只需要一个命令,
pip install configparser
就安装好读配置文件的库了...
人生苦短啊
configparser用法介绍

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容