高分请教resiprocate编译问题

T97102003 2010-04-27 09:24:57
我下载了resiprocate 1.6, 用vc2008打开reSIProcate_9_0.sln, 解决方案里包含的 所有工程:ares, basicCall,basicMessage, basicRegister, db_static, dum, pcre, repro, resip_test, resiprocate,
rutil, reprosetup 都可以编译成功,但若单独打开 resip_test工程,则编译出错:error LNK2005: "public: static unsigned __int64 __cdecl resip::Timer::getTimeMs(void)" (?getTimeMs@Timer@resip@@SA_KXZ) already defined in testServer.obj

类似的错误提示很多,请问如何解决这个问题?
...全文
189 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lili0920 2010-04-27
  • 打赏
  • 举报
回复
帮顶 不清楚 buildall?
尹成 2010-04-27
  • 打赏
  • 举报
回复
1. 错误来源主要是重复定义的问题,而且重复定义的基本上都是VC Runtime和Standard C++ Library中的函数
2. LIBCMT和LIBCPMT为Release下的Lib,本来不应该出现在Debug版本的链接的Lib中
3. 重复定义的问题主要出现在:LIBCMT, LIBCPMT, MSVCPRTD, MSVCRTD
来看看出问题的LIB是那些:
1. LIBCMT:C Runtime库的多线程静态链接的Release版本
2. LIBCPMT:C++ Standard Library的多线程静态链接的Release版本
3. MSVCPRTD:C++ Standard Library的多线程DLL的Debug版本
4. MSVCRTD:C Runtime Library的多线程DLL的Debug版本
当前我们的配置是多线程DLL的Debug版,因此3和4是应该出现在link的列表中的,不属于多余。而后两者则是只是当多线程静态链接Release版中才会出现。这提示我在项目中加入的ANTLR.LIB可能是造成这个问题的根源,因为静态库的编译选项很容易和主程序发生冲突,并且根据实际信息我们可以看出ANTLR.LIB应该是用多线程静态链接的Release版本来编译的。
这样,解决方法就很清楚了:
1. 切换到Release,因为ANTLR.LIB是在Release下面编译的
2. 把Run Time库的版本修改成多线程静态链接
做了这两个修改之后编译通过。
还有一种方法是,自己用多线程DLL的Debug版重新编译一次ANTLR,生成一个新的ANTLRD.LIB,再link这个Lib也可以解决这个问题。
wencheng2998 2010-04-27
  • 打赏
  • 举报
回复
没听说过,帮顶!
liumenghappy 2010-04-27
  • 打赏
  • 举报
回复
没用过,帮顶

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧