导致“无法解析的外部符号”的可能情况
来源:互联网 发布:泳装销售数据 编辑:程序博客网 时间:2024/03/29 05:36
之前写代码时一直有遇到过这种问题:
无法解析的外部符号"XXX::XXXX",该符号在函数"XXX::XXXX" 中被引用......
其大部分都是由于
1.只声明了函数但并没有实现它。
这种一般都是大意忘记了,第一次编译就会发现。
2.声明了函数也定义了函数但其函数参数对不上。
比如项目A中引用了项目B的类,后来修改了项目B中类的成员函数等但A中没改过,导致编译的时候出错。
3.未在被引用的函数或类中加__declspec(dllexport)和__declspec(dllimport)修饰符。
想要让函数在其他项目中被引用就要在源文件处加上__declspec(dllexport),在引用处加上_declspec(dllimport);
一般的写法是
//B项目中://一般在stdafx.h中定义PRJ_B//在导出的XXXH.h中写入对宏定义的判断#ifdefine PRJ_B #define BDLLEXPIMPORT __declspec(dllexport) #else #define BDLLEXPIMPORT __declspec(dllimport) #endif//然后在类中使用//比如b.h头文件中class BDLLEXPIMPORT b{ //.... };
于是,在B项目中因为定义了PRJ_B所以其为导出模式,而在A项目中因为没有定义过PRJ_B所以其为导入模式;
4.项目中包含类(lib,dll)的设置路径不正确。
检查工程中路径的设置是否有误。
5.最近发现如果编译模式方式不同 , (比如win32位下编译和64位下编译)也有可能造成编译不过的现象。
6.有的时候debug版本编译会出现问题,但release版本下编译正常。
这个是实际遇到的情况 , 在编译一个关于sqlite3.c的项目的时候 , 总是提醒无法解析的外部符号_ReadWriteBarrier.
但是服务器上一直都有在不停编译的啊wc怎么会出问题呢 , 于是就去msdn上直接查了一下 , 应该是要包含<intrin.h>头文件 .
然后翻了一下发现include <intrin.h>这句被人注释掉了 , 原因是如果包含这个文件的话vs2002环境下编译不过.
这不是主要的 , 问题是服务器为啥能编译过呢...? 然后看了一下 , 服务器上编译版本是release版本的.
那么估计就是msdn只提供了release版本的库吧....
如果有遇到这种情况可以试试换个版本编译。
- 导致“无法解析的外部符号”的可能情况
- 无法解析的外部符号的几种可能
- 无法解析的外部符号的 3 种可能
- 无法解析的外部符号的 3 种可能
- 无法解析的外部符号的 3 种可能
- 无法解析的外部符号的几种可能
- 无法解析的外部符号的 3 种可能
- 无法解析的外部符号的几种可能
- 无法解析的外部符号的 3 种可能
- C++无法解析的外部符号的3种可能
- 出现无法解析的外部符号,可能的原因
- "无法解析的外部符号"的几种情况
- 无法解析的外部符号
- 无法解析的外部符号
- 无法解析的外部符号
- 无法解析的外部符号
- 无法解析的外部符号
- 无法解析的外部符号
- http协议
- Android开发者指南-Manifest.xml-<uses-feature>
- linux 通用时钟框架CCF
- JavaScript函数基础知识
- mac-intellij ide 启动tomcat 报错:Local host name unknown
- 导致“无法解析的外部符号”的可能情况
- Java---面板组件(Jpanel)1
- jenkins远程部署遇到的问题
- notify(),notifyAll()和signal(),signalAll()的异同
- android 同时点击多个button 避免同时响应,只响应一个点击事件 (是否允许多点触控)
- Android APK反编译就这么简单 详解(附图)
- Spring MVC 学习 之 - URL参数传递
- Java判断字符串是否包含的另一字符串的方法
- Android Studio使用OpenCV的配置方法