过程记录
最近因为测试需要,我在Windows 10操作系统上利用GCC生成并安装libevent的库。我的libevent库的安装路径是D:\Softs\Develop\libevent ,目录下包括bin 、include 、lib 三个目录。然后我用Visual Studio 2019建了一个C项目,并配置好了libevent库。写代码进行测试,一切正常。Visual Studio 2019的相关配置如:
-
项目右键 >> 属性 >> VC++目录 这一部分主要配置包含目录 、库目录 两项,截图如下。 -
项目右键 >> 属性 >> 链接器 >> 输入 此处主要是指定库文件的名称,对于libevent,一般使用event_core.lib 即可。 一般来说,完成第二步,程序的编译不会有什么问题。但是运行时,会报错,并提示找不到相关的dll,图示如下。 因为dll(动态链接库)是程序运行时加载的,而在程序的运行环境中,找不到相关dll的信息,所以报错。一般来说,可以有三种方式来处理这个问题,其实都与程序运行时,相关文件的查找顺序有关系。
Windows在查找dll时,按照如下路径查找:
- 包含EXE文件的目录
- 进程的当前工作目录
- Windows系统目录
- Windows目录
- 列在Path环境变量中的一系列目录
如果在这些地方都找不到需要的文件,则会出现上述错误。
相应的解决方法是:第一种,将需要的dll文件拷贝到程序的运行目录下;第二种,将dll拷贝到环境变量中存在的路径中(比如C://windows// ),或者为第三方库的dll配置环境变量(我的libevent的dll文件在bin 目录下);第三种,则是Visual Studio的一个调试功能,它可以设置将调试的环境设置到特定的目录,我们则可以将调试环境设置为dll文件所在目录。配置如下。 Visual Studio平台上最终的测试代码如下: 编译、链接和运行都没有问题。
因为觉得Visual Studio有时候用起来过于笨重,所以考虑在vscode上搭建环境。用的编译器是GCC。vscode中安装了一个C++的插件。 接下来是vscode中的一系列配置过程。
-
配置C/C++的环境参数(c_cpp_properties.json) 操作步骤是:快捷键Ctrl + Shift + P ,调出命令面板后,找到C/C++:Edit Configurations (UI) 需要注意的是,此处的includePath 仅仅是插件搜索头文件的路径,和GCC编译器没有关系(我这么认为的)。 -
配置构建任务(tasks.json) 操作步骤是:Terminal >> Configure Tasks… 需要注意的是,此处圈出来的部分即GCC编译时的-I 、-L 、和-l 参数。此处区分第一点includePath 配置的内容。 -
调试参数(launch.json) 操作步骤:侧边栏Run and Debug 中,有一个create a launch.json file 的超链。点击后,需要选择环境,选择C++ (GDB/LLDB) 。然后选择配置gcc.exe 。 -
前三步做完,配置基本上就完成了。然后最重要的一点,不要忘了指定dll文件的路径,即上面说的找不到dll的问题。在我的电脑上,如果没有指定dll的路径,运行程序并不会出现上面的弹窗,但是运行会出现莫名其妙的问题。
参考资料
- GCC Linker 在Windows下的查找依赖库的规则
- Visual Studio提示由于找不到dll,无法继续执行代码的问题解决
- 谈谈GCC的-I,-L和-l选项
|