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();


<!--

class Shape

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中的函数,看看是否可以链接成功)。

    1. “链接器-》高级-》目标计算机”设置为”MachineX64 (/MACHINE:X64)”

      技术分享

    2. “链接器-》命令行-》其他选项”设置为” /machine:X64 /debug ” 
      技术分享

    3. “生成-》配置管理器-》活动解决方案平台”设置为” X64 “,如果没有就新建。 
      技术分享

 

参考博客:http://blog.csdn.net/MR1269427885/article/details/53283257




以上是关于C++无法解析的外部命令和外部符号的主要内容,如果未能解决你的问题,请参考以下文章

vs2010 error:1个无法解析的外部命令

无法解析的外部符号,无法解析的外部命令

无法解析的外部符号 C++

error LNK2019: 无法解析的外部符号;fatal error LNK1120: 1 个无法解析的外部命令; 可能存在的问题

C++无法解析的外部符号

Qt creator 编译错误:无法解析的外部符号(命令)