C++无法解析的外部命令和外部符号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++无法解析的外部命令和外部符号相关的知识,希望对你有一定的参考价值。
编译的时候出现
无法解析的外部命令
和
error LNK2001: 无法解析的外部符号 "public: virtual double __thiscall Shape::area(void)const " (?area@Shape@@UBENXZ) E:\VS\Project\Project\Circle.obj Project
//Shape.h
#define PI 3.1415
using namespace std;
class Shape
public:
virtual double circum() const;
virtual double volume() const;
virtual double area() const;
virtual void print() const = 0;
;
---------------------------------------------------------------------------------------
//Circle.h
#include "Shape.h"
#define PI 3.1415
class Circle : public Shape
public:
Circle(double = 0.0);
void setRadius(double);
double getRadius() const;
double circum() const;
virtual double area() const;
virtual void print() const;
private:
double radius;
;
---------------------------------------------------------------------------------------
//Circle.cpp
#include<iostream>
#include "Circle.h"
#define PI 3.1415
using namespace std;
Circle::Circle(double r)
setRadius(r);
void Circle::setRadius(double r)
radius = r;
double Circle::getRadius() const
return radius;
double Circle::circum() const
return PI * getRadius() * 2;
double Circle::area() const
return PI * getRadius() * getRadius();
void Circle::print() const
cout << "圆的周长为:" << circum() << endl;
cout << "圆的面积为:" << area() << endl;
int main()
double r;
cout << "shuru";
cin >> r;
Circle m;
m.setRadius(r);
m.print();
<!--
public:
virtual double circum() const;
virtual double volume() const;
virtual double area() const;
virtual void print() const = 0;
;
父类的前三个方法都没有实现,要么都声明成纯虚方法,或者加个空实现 参考技术A Shape类中的非纯虚函数没有定义吧。
error LNK2019: 无法解析的外部符号;fatal error LNK1120: 1 个无法解析的外部命令; 可能存在的问题
一、问题:使用一个.lib出现如下错误 (我使用的环境 vs2012)
error LNK2019: 无法解析的外部符号 _SSL_CTX_new,该符号在函数 _main 中被引用;
fatal error LNK1120: 1 个无法解析的外部命令;
二、出现该问题的原因:
1.原因:最大的可能就是使用的lib在引用的时候没添加好。
解决方法:需要查看一下调用的配置是否正确:
项目--》属性--》链接器--》常规--》附加库目录:填写附加依赖库所在目录 分号间隔多项
项目--》属性--》链接器--》输入--》附加依赖项:填写附加依赖库的名字.lib 空格或分号间隔多项
2.原因:该lib的库版本不对,需要编译出32位程序,用32位的lib,编译出64位程序,用64位的lib。
(我的问题是编译32位的程序用了64位的库,不知道编译64位程序用32位的库会不会有问题,未尝试)
解决方法:
1) 可以先用vs的--》工具中的--》,使用命令:” dumpbin /all + lib名 “,确认该lib中是否含有有你需要的函数。
2) 尝试修改编译出来的程序类型,重新编译(可以写个测试lib的工程,单独调用该lib中的函数,看看是否可以链接成功)。
-
“链接器-》高级-》目标计算机”设置为”MachineX64 (/MACHINE:X64)”
-
“链接器-》命令行-》其他选项”设置为” /machine:X64 /debug ”
-
“生成-》配置管理器-》活动解决方案平台”设置为” X64 “,如果没有就新建。
参考博客:http://blog.csdn.net/MR1269427885/article/details/53283257
以上是关于C++无法解析的外部命令和外部符号的主要内容,如果未能解决你的问题,请参考以下文章
error LNK2019: 无法解析的外部符号;fatal error LNK1120: 1 个无法解析的外部命令; 可能存在的问题