导航:首页 > 源码编译 > cmake编译无法解析的外部命令

cmake编译无法解析的外部命令

发布时间:2022-05-27 17:33:00

㈠ C语言出现无法解析的外部命令情况是怎么回事,我把结构数据的声明和定义都放在头文件中:

这个extern是声明而非定义,它表示first在别的某处,肯定是你在别的地方没有定义。
你可以在和该头文件对应的cpp文件中定义这三个变量。

直接在头文件定义(即去掉extern)是不好的做法,如果多个cpp一起编译,它们引用了不止一次这个头文件,会出现重复定义的错误。

最佳的做法是,一处定义,多处声明。

㈡ c++无法解析的外部命令

函数就是 void main() 写错了,是void main()不是void mian(),如果不是主函数就是没有添加相应的头文件。

1>MSVCRTD.lib(crtexe.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用。

这句话的意思是void mian()函数在某个类中,没有添加累的头文件。

(2)cmake编译无法解析的外部命令扩展阅读:

注意事项

1、在调用外部库的时候,出现这种问题,可能就是库调用的方式不对,在QT中调用的时候,可以在.pro文件中加入库,或者可以在头文件中使用

#pragma comment(lib, “HITP450.lib”);

2、排除了这种问题,接下来就有可能调用了没有进行声明的函数,检查一下是否在头文件中进行定义。

3、配置属性-常规-mfc的使用,选择为使用标准Windows库,或者选择在静态库中使用mfc,并且在程序中添加 #pragma comment (lib,"Advapi32.lib") 或者在项目-属性-链接器-输入-附加依赖项 中添加相应的库名字,但是该库的文件路径最好跟当前项目的路径是一样的,否则需要在项目-属性-vc++目录-库目录 里面加上该库的目录,否则找不到该库

4、重要一定要确定好,lib的位数和编译器的位数选择是一致的。

㈢ win7 安装qt vs2010配置boost,CGAL等

一、安装cmake

1、这一步比较简单,下载安装最新版本cmake-2.8,开始如下安装

2、注意这里选择第二个选项,为所有的用户添加系统变量

3、选择安装到目录 F:\CMake 2.8,个人建议最好安装在C盘目录下。

4、安装完毕后确认一下系统变量中有没有红色框中的目录,若没有需要手动添加进去。

5、cmake安装完毕!
二、安装Boost库

1、下载最新版本,当前为boost_1_55_0

2、按 Win+R组合键输入cmd进入命令窗口:
切换当前目录为boost的安装目录(G:\boost_1_55_0),输入bootstrap.bat

3、执行完上述命令后会在安装目录下生成如下exe文件

4、继续在DOS窗口中输入bjam.exe,程序会根据你当前安装的编译环境(vs2010,vs2012,vs2013)等自动选择与之相适应的库文件和包含文件等。
此过程大概需要20分钟左右。根据下面第二个图片可以算出我的编译环境为MSVC-12.0即VS2013.

5、20分钟左右后可以看到如下界面,说明Boost库配置完成

三、安装CGAL

1、下载CGAL,这里我下载的是CGAL-4.4这个版本(当前最新的)

2、安装位数选择32位
如果选择64位进行安装,则会在以后配置完毕后出现类似“无法识别的外部符号。。。”等问题,很难进行正确配置。所以这里最好全部选择32位进行安装。

3、安装目录我选择C:\Program Files\CGAL-4.4
安装在其他目录时可能会出现用Cmake编译时出现好几外错误。可以尝试通过安装在C盘进行解决。

4、选择如下几项,单击下一步

5、安装完成后可能会出现如下提示,则需要手动添加F:\CGAL-4.4\auxiliary\gmp\lib到Path变量中

6、此时CGAL安装完成
四、用Cmake配置CGAL库

1、打开Cmake软件选择如下目录,注:两个目录是相同的

2、单击“config"-选择如下编译器(默认是32位,与前面安装软件一定要保持一致)

3、单击确定后,出现如下界面说明配置成功

4、找到如下图的这一项,选中,再次单击"config"进行配置

5、单击Generate,此时界面应如下。

6、此时在CGAL安装目录下出现如下文件:CGAL.sln

7、打开此文件,此时编译器会自动组建一个解决方案。如下图

8、选择32位debug模式,按F7进行编译,编译完成后如下图所示,表明CGAL至此完全配置成功。

五、举例测试CGAL

新建一个控制台应用程序,并添加如下代码

#include <iostream>
#include <boost/format.hpp>
#include <QtGui>
#include <CGAL/Qt/GraphicsViewNavigation.h>
#include <QLineF>
#include <QRectF>
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QGraphicsScene scene;
scene.setSceneRect(0,0, 100, 100);
scene.addRect(QRectF(0,0, 100, 100), QPen(QColor(255,0,0)));
scene.addLine(QLineF(0,0, 100, 100));
scene.addLine(QLineF(0,100, 100, 0));
QGraphicsView* view = new QGraphicsView(&scene);
CGAL::Qt::GraphicsViewNavigation navigation;
view->installEventFilter(&navigation);
view->viewport()->installEventFilter(&navigation);
view->setRenderHint(QPainter::Antialiasing);
view->show();
return app.exec();
}

添加包含库目录,操作如下图,注意红色框中的添加内容

添加附加库目录,操作如下图,注意红色框中的添加内容

直接编译运行此时会出现如下错误,别急,我们离成功只差一步了
>test.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QColor::QColor(int,int,int,int)" (__imp_??0QColor@@QAE@HHHH@Z),该符号在函数 _main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QBrush::QBrush(void)" (__imp_??0QBrush@@QAE@XZ),该符号在函数 _main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QBrush::~QBrush(void)" (__imp_??1QBrush@@QAE@XZ),该符号在函数 _main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall QWidget::show(void)" (__imp_?show@QWidget@@QAEXXZ),该符号在函数 _main 中被引用
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual bool __thiscall QWidget::winEvent(struct tagMSG *,long *)" (?winEvent@QWidget@@MAE_NPAUtagMSG@@PAJ@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "protected: virtual void __thiscall QWidget::windowActivationChange(bool)" (?windowActivationChange@QWidget@@MAEX_N@Z)
1>G:\Cpp\Midaxis\CGAL512\Debug\CGAL512.exe : fatal error LNK1120: 81 个无法解析的外部命令
添加附加依赖项。
选择“链接器”---“输入”,在其中输入如下添加LIB文件
phonon4.libQAxContainer.libQtCLucene4.libQtCore4.libQtDeclarative4.libQtDesigner4.libQtGui4.libqtmain.libQtOpenGL4.lib

再次编译运行,即可大功告成了!

㈣ 用c语言编程序,遇到无法解析的外部符号,求解决方法

使用cl编译的时候,不会自动帮你链接常用的系统库,所以,需要你手动指定需要的库文件。指定库文件时,可以使用参数/link
库文件,也可以直接写库文件名。
MessageBox函数族(编译器会根据字符集自动判断是使用后缀是A还是W的函数)在库文件User32.lib中,加上就行了,命令行:
cl
G:\1.c
User32.lib
注意我的源文件是在G盘下的,内容和你的一样。编译结果:

㈤ C程序编译时提示无法解析的外部命令


int contiune_function(void)
{
printf(" Do you wish to continue? (0=NO/1=YES: ");
scanf("%d", &x);


这里名字写错了,应该是:continue_function

intcontinue_function()
{
printf(" Doyouwishtocontinue?(0=NO/1=YES:");
scanf("%d",&x);

while(x<0||x>1)
{
printf(" %disinvalid!",x);
printf(":");
scanf("%d",&x);
}

if(x==0)
return(NO);
else
return(YES);
}

㈥ c语言编译错误 fatal error LNK1120: 1 个无法解析的外部命令

出这个错是你建立程序的时候工程选错了,选成了 Win32 Application
应该是 win32 Console Application

和 .c .cpp没有一毛钱关系

㈦ C语言中显示无法解析的外部命令

这是因为c和c++混编带来的问题。

1,问题根源:c++是支持类和名字空间,函数重载等高级技巧的。以函数重载为例:

int Add(int a, int b)

int Add(int a, int b, int c)

这意味着不同的函数有同样的名字(你写的,都叫Add),但是同样的名字会带来混淆,所以使用了一种叫“名字毁坏”的技术,不同的编译器有不同的毁坏规则,只要能实现区分就好。

所以,经过c++编译器的处理,你的Add名字已经面目全非,比如我这里叫:

错误 LNK2019 无法解析的外部符号 "int __fastcall Add(int,int)" (?Add@@YIHHH@Z),函数 _main 中引用了该符号。

到这,都没什么,只不过名字变了一下,只要编译器能处理正确就好。

但是,重点来了,你放了一个c文件进去,c语言,是不支持这些高级玩意儿的,名字也不会毁坏,这样,一个毁坏一个还是原名,得,两下对不上了。

2,解决办法

解决办法也是模式化的,当你声明的变量或者函数在c文件实现的时候,在h文件里声明的时候,用这样的结构包含起来,无论有多少个函数,都可以放在一起。

#ifdef __cplusplus

extern "C" {

#endif

int Add(int, int);

//其他声明

#ifdef __cplusplus

}

#endif

再编译就不会出现Link错误了。

头文件全文如下:

#pragma once

#ifdef __cplusplus

extern "C" {

#endif

int Add(int, int);

#ifdef __cplusplus

}

#endif

㈧ c语言 error 无法解析的外部符号

是main()
不是 mian()

㈨ c语言无法解析的外部符号

请将schoolwork.c这个源文件添加入工程里,否则根本不会编译到这个文件,只会编译"源.cpp",然而"源.cpp"这个文件并没有main函数。
添加方法:
右键点击“源文件”,在弹出菜单中选择“添加”,在下级菜单中选择“现有项”,此时出现文件浏览对话框
然后找到schoolwork.c,此后“源文件”这一栏里会出现schoolwork.c
再进行编译即可。

㈩ C程序 无法解析的外部符号

你应该在hotel.h头文件的函数前面加入extern,以表明这是可以被外部文件访问的函数,
例如:
extern getnights(void);

另外,在编写头文件的时候,应该编写头文件保护代码,
在头文件的开始处,加入:
#ifndef HOTEL_H
#define HOTEL_H
在头文件末尾,加入:
#endif

阅读全文

与cmake编译无法解析的外部命令相关的资料

热点内容
抖音python面试算法题 浏览:86
java单击事件 浏览:641
绝对尺寸编程法 浏览:265
服务器共享文件夹中病毒 浏览:35
哪个app会员看综艺最全 浏览:761
程序员朋友圈招聘 浏览:339
细细的小木棍怎么做解压玩具 浏览:36
不要惹程序员的视频 浏览:995
码高编程如何加盟 浏览:756
程序员好处有哪些 浏览:954
c语言编译后的程序 浏览:12
公交卡单片机 浏览:745
减压缩软件下载 浏览:300
51单片机复位电路有哪两种 浏览:924
et2008加密狗教程 浏览:965
安卓手机用什么录制高清视频 浏览:749
cadim命令如何应用 浏览:951
免费ntp时钟服务器地址 浏览:686
域名如何与云服务器绑定 浏览:808
linuxjava环境搭建教程 浏览:128