vs2005中的error LNK2019

满衣兄 2009-03-17 04:37:36
描述:同样的代码在vc++6.0中是可以的,但是我现在移到vs2005就出现了下面的错误(出错的地方在代码里标出来了)。
我用的是jthread.lib和jrtplib.lib这两个库,也在vs2005重新编译了。

#pragma once

//RTP支持
#include "jrtp/RTPSession.h"
#include "jrtp/RTPIPv4Address.h"
#include "jrtp/RTPSessionParams.h"
#include "jrtp/RTPUDPv4Transmitter.h"
#include "jrtp/rtpsession.h"
#include "jrtp/RTPPacket.h"
#include "RTPAppSession.h"

const int PORT_BASE = 14506;
const long MAX_PACKET_SIZE = ((1024 * 64) - 1);

struct DataSession
{
RTPSession rtpSend;
RTPAppSession rtpReceive;
};

class CRtpInit
{
public:
void Init(CDialog *dlg,uint16_t LocalAudioPort,uint16_t RomateAudioPort);
public:
//RTP传输变量
DataSession m_sessData;
unsigned long intIP;
RTPIPv4Address *rtpAddr;
};



#include "StdAfx.h"
#include "RtpInit.h"
#include "jrtp/rtpsession.h"

void CRtpInit::Init(CDialog *dlg,uint16_t LocalAudioPort,uint16_t RomateAudioPort)
{
RTPSessionParams sessParams;
RTPUDPv4TransmissionParams transParams;

WORD wVersionRequested;
WSADATA wsaData;

wVersionRequested=MAKEWORD(2,2);

if(WSAStartup(wVersionRequested,&wsaData)!=0)
{
return;
}

//建立RTP的数据发送
sessParams.SetOwnTimestampUnit(1.0 / 30.0); //30 video frames per second
sessParams.SetUsePollThread(1); //background thread to call virtual callbacks - set by default, but just to be sure
sessParams.SetMaximumPacketSize(MAX_PACKET_SIZE);
transParams.SetPortbase(PORT_BASE);
m_sessData.rtpSend.Create(sessParams, &transParams);//这句出错。在vc6.0里是正确的。
}


错误信息:
1>jrtplib.lib(rtprandom.obj) : error LNK2019: unresolved external symbol __imp__srand referenced in function "public: __thiscall RTPRandom::RTPRandom(void)" (??0RTPRandom@@QAE@XZ)
1>jrtplib.lib(rtprandom.obj) : error LNK2019: unresolved external symbol __imp__clock referenced in function "public: __thiscall RTPRandom::RTPRandom(void)" (??0RTPRandom@@QAE@XZ)
1>jrtplib.lib(rtprandom.obj) : error LNK2019: unresolved external symbol __imp___getpid referenced in function "public: __thiscall RTPRandom::RTPRandom(void)" (??0RTPRandom@@QAE@XZ)
1>jrtplib.lib(rtprandom.obj) : error LNK2019: unresolved external symbol __imp___time64 referenced in function _time
1>jrtplib.lib(rtprandom.obj) : error LNK2019: unresolved external symbol __imp__rand referenced in function "unsigned char __cdecl GetRandom8_Default(void)" (?GetRandom8_Default@@YAEXZ)
1>jthread.lib(jthread.obj) : error LNK2019: unresolved external symbol __imp___beginthreadex referenced in function "public: int __thiscall JThread::Start(void)" (?Start@JThread@@QAEHXZ)
1>.\bin\AudioChat.exe : fatal error LNK1120: 6 unresolved externals
1>Build log was saved at "file://e:\Projects\showgame3\TestProjects\AudioChat\AudioChat\AudioChat\Debug\BuildLog.htm"
1>AudioChat - 7 error(s)
...全文
8225 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sujianan 2012-06-26
  • 打赏
  • 举报
回复
遇到了..
hanbso 2010-06-22
  • 打赏
  • 举报
回复
工程属性 -> 配置属性 -> 常规 -> ATL的使用 设置为 静态链接到ATL

我和你一样的问题这样就解决了
Rain10276599 2010-03-10
  • 打赏
  • 举报
回复
我也重新设置过了,可是还不好用。。。
wuchaa2008 2009-10-21
  • 打赏
  • 举报
回复
DDDDDD
满衣兄 2009-03-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 Clerk_9919 的回复:]
你在build jthread.lib和jrtplib.lib这两个库的时候静态链接msvcrt.lib 中的函数,
在build你自己的程序的时候也要链接msvcrt.lib中的同相函数,所以出现了同名函数的冲突

你在jthread.lib和jrtplib.lib的project里设置
Linker =》 Input=》Igonre Specfic Library 添加 msvcrt.lib

不要在你自己程序的project里设置
[/Quote]
射过了,不行的。谢谢你。
满衣兄 2009-03-17
  • 打赏
  • 举报
回复
自己解决了,我把md5所在的那个lib去掉了,把里面的文件直接拿过来用就可以了。谢谢各位。
Clerk_9919 2009-03-17
  • 打赏
  • 举报
回复
你在build jthread.lib和jrtplib.lib这两个库的时候静态链接msvcrt.lib 中的函数,
在build你自己的程序的时候也要链接msvcrt.lib中的同相函数,所以出现了同名函数的冲突

你在jthread.lib和jrtplib.lib的project里设置
Linker =》 Input=》Igonre Specfic Library 添加 msvcrt.lib

不要在你自己程序的project里设置
满衣兄 2009-03-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Clerk_9919 的回复:]
原因是你多次链接了 msvcrt.lib
[/Quote]
不太明白,能详细说一下吗?
满衣兄 2009-03-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 Clerk_9919 的回复:]
你在build jthread.lib和jrtplib.lib这两个库的时候不要链接 msvcrt.lib
[/Quote]
请问怎么设置?
Clerk_9919 2009-03-17
  • 打赏
  • 举报
回复
原因是你多次链接了 msvcrt.lib
Clerk_9919 2009-03-17
  • 打赏
  • 举报
回复
你在build jthread.lib和jrtplib.lib这两个库的时候不要链接 msvcrt.lib
满衣兄 2009-03-17
  • 打赏
  • 举报
回复
补充:红色部分:
工程属性:Linker =》 Input=》Igonre Specfic Library 添加 msvcrt.lib
满衣兄 2009-03-17
  • 打赏
  • 举报
回复
我找到原因了。
原因是这样的,我要用一个md5加密的算法,进行下面设置之后才可以正确编译,否则报错。
工程属性:Linker =》 Input=》Igonre Specfic Library 添加 msvcrt.lib

但是这样设置之后,我用jthread.lib和jrtplib.lib这两个库的时候就出现了上面的错,去掉这个设置就正确。
郁闷了,有没有折中的方法啊?
如果不进行红色部分的设置则出现下面的错:


1>libcmtd.lib(sprintf.obj) : error LNK2005: _sprintf already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(vsnprnc.obj) : error LNK2005: _vsprintf_s already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(dbgheap.obj) : error LNK2005: _malloc already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(dbgheap.obj) : error LNK2005: _free already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(dbgheap.obj) : error LNK2005: __CrtSetCheckCount already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(tidtable.obj) : error LNK2005: __encode_pointer already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(tidtable.obj) : error LNK2005: __decode_pointer already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(dbghook.obj) : error LNK2005: __crt_debugger_hook already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(crt0dat.obj) : error LNK2005: _exit already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(crt0dat.obj) : error LNK2005: __exit already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(crt0dat.obj) : error LNK2005: __cexit already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(crt0dat.obj) : error LNK2005: __amsg_exit already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(crt0dat.obj) : error LNK2005: __initterm_e already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(setlocal.obj) : error LNK2005: __configthreadlocale already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(errmode.obj) : error LNK2005: ___set_app_type already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(mlock.obj) : error LNK2005: __lock already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(mlock.obj) : error LNK2005: __unlock already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(dbgrptw.obj) : error LNK2005: __CrtDbgReportW already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(crt0init.obj) : error LNK2005: ___xi_a already defined in msvcrtd.lib(cinitexe.obj)
1>libcmtd.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in msvcrtd.lib(cinitexe.obj)
1>libcmtd.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in msvcrtd.lib(cinitexe.obj)
1>libcmtd.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in msvcrtd.lib(cinitexe.obj)
1>libcmtd.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) already defined in msvcrtd.lib(MSVCR80D.dll)
1>libcmtd.lib(atox.obj) : error LNK2005: _atoi already defined in msvcrtd.lib(MSVCR80D.dll)
1>msvcrtd.lib(MSVCR80D.dll) : error LNK2005: _strncpy_s already defined in libcmtd.lib(strncpy_s.obj)
1>msvcrtd.lib(MSVCR80D.dll) : error LNK2005: __invalid_parameter already defined in libcmtd.lib(invarg.obj)
1>msvcrtd.lib(MSVCR80D.dll) : error LNK2005: __vsnprintf_s already defined in libcmtd.lib(vsnprnc.obj)
1>msvcrtd.lib(MSVCR80D.dll) : error LNK2005: _rand_s already defined in libcmtd.lib(rand_s.obj)
1>msvcrtd.lib(MSVCR80D.dll) : error LNK2005: _printf already defined in libcmtd.lib(printf.obj)
1>LINK : warning LNK4098: defaultlib 'msvcrtd.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
1>msvcrtd.lib(cinitexe.obj) : warning LNK4098: defaultlib 'libcmtd.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
1>.\bin\AudioChat.exe : fatal error LNK1169: one or more multiply defined symbols found
1>Build log was saved at "file://e:\Projects\showgame3\TestProjects\AudioChat\AudioChat\AudioChat\Debug\BuildLog.htm"
1>AudioChat - 32 error(s)
Dinelgua 2009-03-17
  • 打赏
  • 举报
回复
不会
估计大侠 不会犯该连接的库没有链的错误
帮顶
chin_chen 2009-03-17
  • 打赏
  • 举报
回复
_imp__rand referenced in function "unsigned char __cdecl GetRandom8_Default(void)" 构造函数没定义啊。
ymbol __imp___beginthreadex referenced in function "public: int __thiscall JThread::Start(void)" 加了你那句话估计调用了这些函数,
然后,这些函数,没有找到。
可能你的工程里面依赖项没有设置好吧?
满衣兄 2009-03-17
  • 打赏
  • 举报
回复
m_sessData.rtpSend.Create(sessParams, &transParams);//这句出错。在vc6.0里是正确的。

补充:如果把这句去掉就正确,加上这句就出来7个error

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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