调用动态库导致符号无法解析错误
来源:互联网 发布:淘宝陶瓷店知乎 编辑:程序博客网 时间:2024/04/20 06:34
error:符号无法解析
标签(空格分隔):vs c/c++
http://blog.csdn.net/hust_sheng/article/details/52829188
符号无法解析的常见原因
- 头文件包含出错,导致链接过程找不到源文件
- lib或dll引入失败(静态库或动态库配置问题)
- 调用动态库的情况下,跨工程引入头文件导致的符号解析错误
对第三种情况进行详细说明
较为大型的项目常常会设置较多个工程,以其中一个工程为主工程(包含main函数),且该主工程通过调用其他子工程的静态库或动态库中的相关函数完成处理过程。如果主工程调用子工程的过程中使用的是动态库的形式(即子工程可在创建的时候设置为动态库),此时的函数调用不能include头文件以及相应的.c文件,否则就会出现符号无法解析的error,原因就是对于动态库而言,除非我们指定相应的接口可见,否则函数接口是不可见的。需要注意的是如果该子工程在创建的时候设置为静态库,那么我们还是可以通过include的形式进行函数链接(正常的形式)。
出现上述问题,解决的方法很简单,使用动态库常用的函数调用策略即可:在其他工程中所需的相应函数前使用关键字__declspec(dllexport)进行声明。
动态库的调用形式
- 静态调用(在工程属性中进行相应的设置)
动态调用
HMODULE inst_lib;if (sizeof(void*) == 8) { inst_lib = LoadLibrary("project0.dll");} else { inst_lib = LoadLibrary("project1.dll");}if (inst_lib == NULL) { fprintf(stderr, "Load library error.\n"); return -1;}lib_create = (name_lib_create_t)GetProcAddress(inst_lib, "name_lib_create");lib_decode = (name_lib_decode_t)GetProcAddress(inst_lib, "name_lib_decode");lib_destroy = (name_lib_destroy_t)GetProcAddress(inst_lib, "name_lib_destroy");lib_flush = (name_lib_flush_t)GetProcAddress(inst_lib, "name_lib_flush");
动态调用的好处:在链接的时候不需要考虑动态库的加载和函数的链接问题,当程序运行到这里的时候才会进行加载和链接操作。
0 0
- 调用动态库导致符号无法解析错误
- 无法解析的符号错误
- Visual Studio 2013 C++ 调用mysql错误 error LNK2019: 无法解析的外部符号 _mysql_init@4
- VS 无法解析的外部符号”[错误]
- 出现错误:无法解析的外部符号
- 导致“无法解析的外部符号”的可能情况
- 使用NetCDF库时提示无法链接错误"error LNK2001: 无法解析的外部符号 nc_create"
- error LNK2019: 无法解析的外部符号 错误解析
- c++中调用python脚本提示 error LNK2001: 无法解析的外部符号 __imp_Py_Initialize等错误的解决方法
- [VS2013]C++中调用Python脚本提示 error LNK2001: 无法解析的外部符号__imp_PyString_FromString等错误的解决方案
- c++中调用python脚本提示 error LNK2001: 无法解析的外部符号 __imp_Py_Initialize等错误的解决方法
- VS2015调用低版本lib库出现“无法解析的外部符号 __snprintf ”问题的解决
- directshow中调用ffmpeg库遇到的"无法解析的外部符号"
- 使用动态库时出现,error LNK2019 无法解析的外部符号可能的解决方法。
- 编译时出现错误:无法解析的外部符号
- “LNK2001: 无法解析的外部符号错误”的一种解决方案
- 无法解析的外部符号 Direct3DCreate9@4错误
- 【错误笔记】error LNK2019: 无法解析的外部符号 _cvHaarDetectObjects
- LightOJ 1031 Easy Game--区间dp
- 【leetcode】Remove Duplicates from Sorted List
- 机器人(机械臂)动力学建模方法(Newton-Euler equation)
- request
- 如何上传自己的项目源码到github (Git教程)
- 调用动态库导致符号无法解析错误
- three.js morphTargets使用总结
- 双目测距原理与基于opencv的简单实现
- Php复习(3)
- 【Android开发深入技术】Android 软件的增量更新完全解析(是增量而不是热修复)
- 最近事情多,偷了个懒,没有写程序
- mybatis分页插件实现分页
- NYOJ - 1100 - WAJUEJI which home strong!(BFS变形,优先队列)
- HDU ACM 11 2052 Picture