用vs2010 静态编译编译程序求10+20编译无法通过,望高手指点

3042人阅读
VC++/C++(17)
& && & &最近几天一直在纠结一个问题,就是使用vs2010编译CCV1.5的vs2008版本的工程文件失败。在网上找了很久,没有直接看到有这样的帖子,估计这个比较基础,那我就简单说一下我在此过程中遇到的问题,希望能帮助后面做这个工作的朋友少走弯路。
& & & &首先使用SVN在上下载CCV1.5的源码,如果你的计算机上装有vs2008,可以直接用它编译,它可以直接编译成功,但是无法运行,会提示你应用程序初始化失败,我没有仔细追究其原因,估计是配置的问题。我的计算机上装的是vs2010,所以直接使用vs2010编译。
& & & 使用vs2010编译时,首先要修改一下..\apps\addonsExamples\VS2008\Community Core Vision.sln和..\apps\addonsExamples\VS2008\目录下的名叫Community Core
Vision的project文件的内容,将.sln文件的Project(&{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}&) = &Community Core Vision&, &Community Core Vision.vcproj&,中的修改为Project(&{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}&) = &XXX&, &XXX.vcproj&, 其中“XXX”表示你自己定义的名字,然后将project文件的Name=&Community
Core Vision&修改为Name=&XXX&,并且将这两个文件的文件名也修改为XXX。修改完毕后就使用vs2010打开解决方案文件,最好在转换是选择备份,然后转换完后显示转换日志。
& & & 打开转换日志,可以看到warning MSB8012: TargetPath(...) does not match the Linker's OutputFile property value等提示,意思是宏‘TargetPath’和‘TargetName’与你的输出清单文件的路径和名字不匹配,那么就要进行适当修改。我的vs2010是中文版本的,首先点击工程属性-&属性配置-&常规页中的输出目录设置为\bin,调试页中的命令项设置为$(TargetPath),这个宏指向\CCV1.5\apps\addonsExamples\VS2008\bin\XXX.exe,到时编译后的.exe文件就在bin目录下,主要是为了其能连接里面的dll,然后链接器-&常规页中输出文件项设置为$(OutDir)XXX.exe这样保证了‘TargetName’与.exe的文件名的匹配性。为什么要这样做,可以参见。
& & &当以上都设置好后,就可以编译了,第一次编译会提示这样的错误:
<span style="color:#&c:\program files\microsoft visual studio10.0\vc\include\xxresult(28): error C2825: '_Fty': must be a class or namespacewhen followed by '::'
1& c:\program files\microsoft visual studio 10.0\vc\include\xxresult(40) :see reference to class template instantiation'std::tr1::_Result_type2&__formal,_Fty,_Arg0,_Arg1&' being compiled
1& __formal=false,
1& _Fty=__w64 unsigned int,
1& _Arg0=std::tr1::_Nil &,
1& _Arg1=std::tr1::_Nil &
1& c:\program files\microsoft visual studio 10.0\vc\include\xxresult(597) :see reference to class template instantiation'std::tr1::_Result_of2&_Fty,_Farg0,_Farg1&' being compiled
等等,xxresult是\microsoft visual studio 10.0\vc\include\中的文件,肯定没有错误,但是什么原因引起的呢?
其实是这样的,由于在VS2010中Winsock的
bind()与TR1(C&#43;&#43; Technical Report 1)的bind()冲突导致的。在VS2010中微软将TR1中的bind()声明在名称空间
std 中,而Winsock的bind()则声明在全域(global namespace),当在代码中使用“using
namespace std ”这样的语句引入整个名称空间后,由于此时存在两个bind(),且TR1的bind()是一个模板在编译器重载解析时具有较高的优先级,直接调用bind()将导致了TR1对Winsock调用的覆盖,接下来在编译阶段的类型错误就不足为怪了。
解决的方法很简单,只要让编译器能够正确区别两者就可以了。为了解决由于使用&using namespace std&带来的冲突,我们需要在全域调用时显式的声明,如 “::bind()”,这样编译器就只会在全域中解析该函数的调用,而不会导致冲突。以后遇到类&#20284;的情况,都可以通过全域声明(::call())来解决。
所以将CCV1.5中的ofxTCPManager.cpp中的if(bind(m_hSocket,(struct
sockaddr*)&local,sizeof(local)))改为if(::bind(m_hSocket,(struct sockaddr*)&local,sizeof(local)))
和ofxUDPManager.cpp中的int& ret&&&& =bind(m_hSocket,(struct sockaddr*)&saServer,sizeof(structsockaddr));改为int&
ret & = ::bind(m_hSocket,(struct sockaddr*)&saServer,sizeof(structsockaddr));这个bind()函数前不加::时,在vs2008环境下编译时不会有错的
& & & 修改后继续编译,然后又提示错误:
PocoFoundationmtd.lib(Exception.obj): error LNK2019: 无T法¤?§解a析?的??外?a部?符¤?号? &__declspec(dllimport) public: __thiscallstd::basic_string&char,struct std::char_traits&char&,classstd::allocator&char& &::basic_string&char,structstd::char_traits&char&,class
std::allocator&char& &(structstd::basic_string&char,struct std::char_traits&char&,classstd::allocator&char& &::_Has_debug_it)&(__imp_??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@U_Has_debug_it@01@@Z),ê?该?符¤?号?在¨?函??数?y &protected: __thiscallPoco::Exception::Exception(int)&
(??0Exception@Poco@@IAE@H@Z) 中D被??引°y用(R)?
openframeworksLibDebug.lib(ofAppGlutWindow.obj): error LNK2001: 无T法¤?§解a析?的??外?a部?符¤?号? &__declspec(dllimport) public: __thiscallstd::basic_string&char,struct std::char_traits&char&,classstd::allocator&char& &::basic_string&char,structstd::char_traits&char&,class
std::allocator&char& &(structstd::basic_string&char,struct std::char_traits&char&,classstd::allocator&char& &::_Has_debug_it)&(__imp_??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@U_Has_debug_it@01@@Z)
openframeworksLibDebug.lib(ofUtils.obj): error LNK2001: 无T法¤?§解a析?的??外?a部?符¤?号? &__declspec(dllimport) public: __thiscallstd::basic_string&char,struct std::char_traits&char&,classstd::allocator&char& &::basic_string&char,structstd::char_traits&char&,class
std::allocator&char& &(structstd::basic_string&char,struct std::char_traits&char&,classstd::allocator&char& &::_Has_debug_it)&(__imp_??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@U_Has_debug_it@01@@Z)等等。
& & & &我在论坛上的看到,说要将整个OpenFrameworks用vs2010编译一遍。我就将整个OpenFrameworks编译了,注意,编译之前同样要像第一次编译CCV时配置一下工程文件,配置无误后再编译。继续编译CCV1.5工程文件,又提示一些错误,后面的错误基本就是说什么外部函数无法解析之类的错误,这个错误主要是因为为了使用dll中的函数,相应的.h中的函数声明与其相关的lib库不对应,也就是编译器无法识别lib中的函数,在提供的源代码无误的前提下这个是跟版本有关,于是我将静态链接库目录和附加依赖项中的一部分vs2008版本设置成了vs2010版本,这个主要是根据错误提示来修改,提示哪个lib库有问题,就对这个库的版本进行修改,我所做的改动如下:
链接器-&常规-&附属库目录..\..\..\libs\rtAudio\lib\vs2008改为..\..\..\libs\rtAudio\lib\vs2010,..\..\..\libs\Poco\lib\vs2008改为..\..\..\libs\Poco\lib\vs2010
输入-&附加依赖项..\..\..\addons\ofxOsc\libs\oscpack\lib\vs2008\oscpackd.lib改为..\..\..\addons\ofxOsc\libs\oscpack\lib\vs2010\oscpackd.lib,
再编译,运行,成功!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:247287次
积分:2609
积分:2609
排名:第8928名
原创:27篇
转载:39篇
评论:68条
(1)(3)(1)(1)(1)(1)(1)(2)(1)(1)(2)(3)(2)(3)(2)(6)(8)(5)(3)(1)(4)(15)(1)编译原理试题及答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
编译原理试题及答案
上传于||文档简介
&&编&#8203;译&#8203;原&#8203;理&#8203;试&#8203;题&#8203;及&#8203;答&#8203;案
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩6页未读,继续阅读
你可能喜欢编译原理考试题10套,很多高校都用这套_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
编译原理考试题10套,很多高校都用这套
上传于||文档简介
&&2&#03;1&#03;-&#03;0&#03;2&#8203;编&#8203;译&#8203;原&#8203;理&#8203;考&#8203;试&#8203;题&#03;0&#8203;套&#8203;,&#8203;很&#8203;多&#8203;高&#8203;校&#8203;都&#8203;用&#8203;这&#8203;套
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩22页未读,继续阅读
你可能喜欢> win7 64位 vs2010编译c++程序出错,该怎么解决
win7 64位 vs2010编译c++程序出错,该怎么解决
onliner & &
发布时间: & &
浏览:112 & &
回复:0 & &
悬赏:0.0希赛币
win7 64位 vs2010编译c++程序出错同样的程序在vc6.0下运行正常,在vs2010下出错,在xp上的vs2010上就正确,请高手解答程序:#include&iostream&void
main(){cout$<<$this is a c++ program&$<$}结果:1&------ 已启动生成: 项目: 1, 配置: Debug Win32 ------1&生成启动时间为
20:43:17。1&InitializeBuildStatus:1&
正在对“Debug\1.unsuccessfulbuild”执行 Touch 任务。1&ClCompile:1&
1.cpp1&d:\microsoft visual studio 10.0\vc\include\cstdlib(19): error C2039: “div_t”: 不是“`global namespace'”的成员1&d:\microsoft visual studio 10.0\vc\include\cstdlib(19): error C2873: “div_t”: 符号不能用在 using 声明中1&d:\microsoft visual studio 10.0\vc\include\cstdlib(19): error C2039: “ldiv_t”: 不是“`global namespace'”的成员1&d:\microsoft visual studio 10.0\vc\include\cstdlib(19): error C2873: “ldiv_t”: 符号不能用在 using 声明中1&d:\microsoft visual studio 10.0\vc\include\cstdlib(21): error C2039: “abort”: 不是“`global namespace'”的成员1&d:\microsoft visual studio 10.0\vc\include\cstdlib(21): error C2873: “abort”: 符号不能用在 using 声明中1&d:\microsoft visual studio 10.0\vc\include\cstdlib(22): error C2039: “atoi”: 不是“`global namespace'”的成员1&d:\microsoft visual studio 10.0\vc\include\cstdlib(22): error C2873: “atoi”: 符号不能用在 using 声明中1&d:\microsoft visual studio 10.0\vc\include\cstdlib(22): error C2039: “atol”: 不是“`global namespace'”的成员1&d:\microsoft visual studio 10.0\vc\include\cstdlib(22): error C2873: “atol”: 符号不能用在 using 声明中1&d:\microsoft visual studio 10.0\vc\include\cstdlib(23): error C2039: “bsearch”: 不是“`global namespace'”的成员1&d:\microsoft visual studio 10.0\vc\include\cstdlib(23): error C2873: “bsearch”: 符号不能用在 using 声明中1&d:\microsoft visual studio 10.0\vc\include\cstdlib(23): error C2039: “calloc”: 不是“`global namespace'”的成员1&d:\microsoft visual studio 10.0\vc\include\cstdlib(23): error C2873: “calloc”: 符号不能用在 using 声明中1&d:\microsoft visual studio 10.0\vc\include\cstdlib(23): error C2039: “div”: 不是“`global namespace'”的成员1&d:\microsoft visual studio 10.0\vc\include\cstdlib(23): error C2873: “div”: 符号不能用在 using 声明中1&d:\microsoft visual studio 10.0\vc\include\cstdlib(24): error C2039: “exit”: 不是“`global namespace'”的成员1&d:\microsoft visual studio 10.0\vc\include\cstdlib(24): error C2873: “exit”: 符号不能用在 using 声明中1&d:\microsoft visual studio 10.0\vc\include\cstdlib(24): error C2039: “free”: 不是“`global namespace'”的成员1&d:\microsoft visual studio 10.0\vc\include\cstdlib(24): error C2873: “free”: 符号不能用在 using 声明中1&d:\microsoft visual studio 10.0\vc\include\cstdlib(24): error C2039: “getenv”: 不是“`global namespace'”的成员1&d:\microsoft visual studio 10.0\vc\include\cstdlib(24): error C2873: “getenv”: 符号不能用在 using 声明中1&d:\microsoft visual studio 10.0\vc\include\cstdlib(25): error C2039: “ldiv”: 不是“`global namespace'”的成员1&d:\microsoft visual studio 10.0\vc\include\cstdlib(25): error C2873: “ldiv”: 符号不能用在 using 声明中1&d:\microsoft visual studio 10.0\vc\include\cstdlib(25): error C2039: “malloc”: 不是“`global namespace'”的成员1&d:\microsoft visual studio 10.0\vc\include\cstdlib(25): error C2873: “malloc”: 符号不能用在 using 声明中1&d:\microsoft visual studio 10.0\vc\include\cstdlib(26): error C2039: “mblen”: 不是“`global namespace'”的成员1&d:\microsoft visual studio 10.0\vc\include\cstdlib(26): error C2873: “mblen”: 符号不能用在 using 声明中1&d:\microsoft visual studio 10.0\vc\include\cstdlib(26): error C2039: “mbstowcs”: 不是“`global namespace'”的成员1&d:\microsoft visual studio 10.0\vc\include\cstdlib(26): error C2873: “mbstowcs”: 符号不能用在 using 声明中1&d:\microsoft visual studio 10.0\vc\include\cstdlib(26): error C2039: “mbtowc”: 不是“`global namespace'”的成员1&d:\microsoft visual studio 10.0\vc\include\cstdlib(26): error C2873: “mbtowc”: 符号不能用在 using 声明中1&d:\microsoft visual studio 10.0\vc\include\cstdlib(27): error C2039: “qsort”: 不是“`global namespace'”的成员1&d:\microsoft visual studio 10.0\vc\include\cstdlib(27): error C2873: “qsort”: 符号不能用在 using 声明中
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&编译原理10套试卷及答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
编译原理10套试卷及答案
上传于||文档简介
&&编&#8203;译&#8203;原&#8203;理&#03;0&#8203;套&#8203;试&#8203;卷&#8203;及&#8203;答&#8203;案&#8203;,&#8203;编&#8203;译&#8203;原&#8203;理&#8203;几&#8203;乎&#8203;都&#8203;是&#8203;在&#8203;考&#8203;这&#8203;些&#8203;题&#8203;目
阅读已结束,如果下载本文需要使用5下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩30页未读,继续阅读
你可能喜欢

我要回帖

更多关于 vs2010 静态编译 的文章

 

随机推荐