Spark RDD,DataFrame和DataSet苹果7和苹果8的区别别

在Eclipse CDT中编译含有多个main函数的项目
在C/C++项目中有时候会需要在一个项目中包含多个main函数。在Visual Studio中,这种情况可以由一个解决方案下带多个项目来解决,但在Eclipse CDT中没有解决方案这样的概念。其实通过定制的Makefile,Eclipse CDT也可以很容易达到目的,对于习惯了Makefile的程序员来说可能觉得这样反而更灵活。默认情况下,Eclipse CDT会为项目的Debug和Release配置都自动产生makefile,而且这个自动产生的makefile是会尝试把所有源文件编译并生成单独的一个以项目名命令的二进制文件。而如果你的项目有两个以上的文件带有main函数,Eclipse就会报错:
multiple definition of `main&
既然Eclipse也是通过makefile来,那么一定通过能自己修改或创建makefile的方法让Eclipse知道哪些时候该敢什么,而不是不按你的意图做事。通过一番尝试,我找到了可行之道。下面以一个简单的例子来说明怎么在Eclipse里面随心所欲的使用makefile。
假设我们有一个很简单的C/S结构的项目,包含客户端和服务端这两个需要编译的目标。现在你已经写好了代码:tcp_server.cpp, tcp_client.cpp。那么Let&s do it now!
第一步,在项目的Properties中定位到&C/C++ Build&,在右边的面板中点击&Manage Configurations&&,随后选择&New&&新建一个配置(图1),取名MyDebug并从已有的Debug配置复制(图2)。之后回到图1的窗口,在顶部下拉菜单中选择MyDebug。&Makefile generation&区域有一个选项&Generate Makefiles automatically&,因为我们要自己编写,所以去掉勾选。随后可选择性的编辑&Build directory&,为简单起见,建议设为项目所在的根目录,需要注意的是这个必须是你存放Makefile的路径。
第二步,编写Makefile,注意要放在上面所设置的路径下,还要注意如果不在代码文件同一目录,需要在Makefile中用&..&操作符跳转路径。我在这个例子中使用的Makefile如下:
#demo multiple target project
RM := rm-rf
LIBS := -l boost_system -l boost_thread
all : tcp_client tcp_server
&&&&$(RM) tcp_client tcp_server
tcp_client : tcp_client.cpp
&&&&$(CC) tcp_client.cpp -o tcp_client $(LIBS)
tcp_server : tcp_server.cpp
&&&&$(CC) tcp_server.cpp -o tcp_server $(LIBS)
第三步,编译项目。如果有选择&Build Automatically&就不用操心了,Eclipse会根据你的Makefile工作,并且不会再出现多个main函数的错误。否则,点击工具栏上的Build标志旁边下拉按钮并选择MyDebug,这样Eclipse会找到Makefile中定义的第一个target也就是all来分别编译两个对象。另外,如果想单独编译其中某个target,可选择Project菜单 & Make Target & Build& & Add& 名字取与Makefile中相同的target名,比如tcp_client。而后选中刚创建的target,点击Build就可以了。
阅读(...) 评论()温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
fatal error LNK1169: 找到一个或多个多重定义的符号之后,我尝试吧其中一个源文件里的int main()删去,在另一个源文件里加入#include “另一个文件名.cpp” ,还是编译失败报错情况:error LNK2005: "void __cdecl asd(void)" (?asd@@YAXXZ) 已经在 sio.obj 中定义fatal error LNK1169: 找到一个或多个多重定义的符号于是我写了一个头文件包含了void asd()的声明,同时有int main()的文件中包含了改头文件,编译成功,运行正常于是我在ubuntu下新建了一个文件夹touch,里面有三个文件a.c b.c makefilea.c里为 int main () {printf("a\n");}&b.c里为&int main () {printf("b\n");}&makefile里第一句为test:a.o b.o cc -o test a.o b.omake编译,仍然是失败,报错为b.o: In function 'main':b.c:(.text+0x0): multiple definition of 'main'a.o:a.c:(text+0x0): first defined herecollect2:ld 返回 1之后,我把其中一个main函数改为普通函数,通过另一个文件调用即a.c 里改为void kain () {printf("a\n");}&b.c里改为&int main () {printf("b\n");kain();}makefile不变make编译成功考虑到若是c++会不会不一样,我把makefile里的cc改成g++,结果make编译时发生错误,b.c编译时会发现错误:“kain”在此作用域中尚未声明于是我写了一个ab.h里包含了void kain()的声明,在a.c中包含了头文件ab.h,同时改写makefile,相当于b.c是对ab.h里的kain()的定义make编译后成功个人总结:对于C:Linux下可以同过编写makefile使先分别编译同一项目下的不同源文件,再把不同文件连接起来&& & & & & & & & & 对于C++:无论VS2010还是Linux环境下要连接两个或多个源文件,需要通过头文件声明函数,不含有main函数的源文件相当于对头文件里声明的定义,含有main函数的源文件需要包括该头文件& & & & & & & & & 无论是linux下还是windows下,无论c还是c++都不允许一个工程下含有两个或以上main函数
阅读(6186)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'关于一个工程下多个源文件以及main函数',
blogAbstract:'今天经测试,同一工程下的两个源文件同时存在int main()编译时是会发生错误的(测试环境:win7 VS2010)报错情况:fatal error LNK1169: 找到一个或多个多重定义的符号之后,我尝试吧其中一个源文件里的int main()删去,在另一个源文件里加入#include “另一个文件名.cpp” ,还是编译失败报错情况:error LNK2005: \"void __cdecl asd(void)\" (?asd@@YAXXZ) 已经在 sio.obj 中定义fatal error LNK1169: 找到一个或多个多重定义的符号于是我写了一个头文件包含了void asd()的声明,同时有int main()的文件中包含了改头文件,编译成功,运行正常',
blogTag:'多个源文件,main',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:9,
publishTime:7,
permalink:'blog/static/',
commentCount:4,
mainCommentCount:3,
recommendCount:2,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}1772人阅读
maven(25)
maven项目右键运行或者run as运行main方法找不到类
报错信息如下:
java.lang.NoClassDefFoundError: com/reallyinfo/athena/core/impl/TaizhouLand
Caused by: java.lang.ClassNotFoundException: com.reallyinfo.athena.core.impl.TaizhouLand
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
有两种情况
1.没有编译
2.没设置source path,编译后得不到类
针对没有编译
没有编译的项目在target文件夹就可以判断出来,可以看到它里面是没有我们运行main方法的.class的
我们运行一下编译就可以了 &操作步骤如下:
编译成功后 class就出现了 这时候再运行main方法 就ok了
针对没有设置sourcepath
build path中设置一下即可,或者在.classpath中设置
并且检查输出output路径
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:926301次
积分:13958
积分:13958
排名:第663名
原创:487篇
转载:59篇
评论:150条
文章:16篇
阅读:34252
文章:31篇
阅读:23284
文章:24篇
阅读:49450
文章:12篇
阅读:41228
文章:14篇
阅读:34642
文章:34篇
阅读:31226
文章:20篇
阅读:51838
(1)(11)(13)(3)(10)(2)(3)(5)(2)(4)(4)(9)(8)(26)(7)(9)(9)(10)(8)(11)(9)(10)(13)(12)(5)(39)(37)(6)(6)(7)(9)(7)(8)(14)(10)(9)(8)(21)(33)(17)(28)(9)(14)(6)(21)(18)(2)(8)(4)}

我要回帖

更多关于 iphonex和iphone8区别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信