求大神,帮忙解决!
若歌 2017-02-22 07:16:01 [code=c][/co
报错::
.cpp:80: error: undefined reference to `_imp___ZN7jrtplib17RTPGetErrorStringB5cxx11Ei'
.cpp:88: error: undefined reference to `_imp___ZN7jrtplib17RTPGetErrorStringB5cxx11Ei'
collect2.exe:-1: error: error: ld returned 1 exit status
显示找不到这个函数RTPGetErrorString()可是头文件里我已经包含了啊
pro文件库里包含文件如下:
LIBS += -lWs2_32
LIBS += $$PWD/lib/libjrtplib.dll.a\
INCLUDEPATH += $$PWD/include/jrtplib\
$$PWD/include/jthread\
$$PWD/include
SOURCES += main.cpp\
mainwindow.cpp \
crtpthread.cpp
HEADERS += mainwindow.h \
crtpthread.h
FORMS += mainwindow.uide]
.h文件
#include <QThread>
#include "rtpsession.h"
#include "rtpudpv4transmitter.h"
#include "rtpipv4address.h"
#include "rtpsessionparams.h"
#include "rtperrors.h"
#include "rtppacket.h"
using namespace jrtplib;
class CRtpThread : public QThread
{
Q_OBJECT
public:
CRtpThread();
~CRtpThread();
void rtpSendData(uchar *dataBuf, int dataLen);
private:
void dispatch(uchar *dataBuf, int dataLen);
void initialRTP(uint8_t *ip);
protected:
void run();
private:
volatile bool m_runFlag;
RTPSession m_session;
RTPSessionParams m_sessionparams;
RTPUDPv4TransmissionParams m_transparams;
signals:
void signalRtpData(uchar *dataBuf,int dataLen);
};
#endif // CRTPTHREAD_H
.c文件
#include "crtpthread.h"
#include <QDebug>
CRtpThread::CRtpThread():
m_runFlag(true)
{
#ifdef RECEIVER
uint8_t destIP[]={192,168,99,149};
#else
uint8_t destIP[]={192,168,99,149};
#endif
initialRTP(destIP);
}
CRtpThread::~CRtpThread()
{
m_session.BYEDestroy(RTPTime(10,0),0,0);
m_runFlag=false;
#ifdef WIN32
WSACleanup();
#endif // WIN32
}
void CRtpThread::run()
{
while(m_runFlag)
{
usleep(1);
m_session.BeginDataAccess();
if (m_session.GotoFirstSourceWithData())
{
do
{
RTPPacket *pack;
while ((pack = m_session.GetNextPacket()) != NULL)
{
int recvSize = pack->GetPayloadLength();
uint8_t * recvData=pack->GetPayloadData();
dispatch(recvData, recvSize);
m_session.DeletePacket(pack);
}
} while (m_session.GotoNextSourceWithData());
}
m_session.EndDataAccess();
#ifndef RTP_SUPPORT_THREAD
int status = m_session.Poll();
if (status < 0)
{
qDebug()<< RTPGetErrorString(status).c_str();
}
#endif
}
}
void CRtpThread::dispatch(uchar *dataBuf, int dataLen)
{
emit signalRtpData(dataBuf,dataLen);
#ifdef RECEIVER
//将收到的数据转发
rtpSendData(dataBuf, dataLen);
#endif
}
void::CRtpThread::initialRTP(uint8_t *ip)
{
#ifdef WIN32
WSADATA dat;
WSAStartup(MAKEWORD(2,2),&dat);
#endif // WIN32
//每秒发送10个样本
m_sessionparams.SetOwnTimestampUnit(1.0/10.0);
//设置本地端口
m_transparams.SetPortbase(27000);
int status = m_session.Create(m_sessionparams,&m_transparams);
if (status < 0)
{
qDebug()<< RTPGetErrorString(status).c_str();
//RTPGetErrorString(status).c_str();
}
//设置目的IP和端口
RTPIPv4Address addr(ip,27000);
status = m_session.AddDestination(addr);
if (status < 0)
{
qDebug()<< RTPGetErrorString(status).c_str();
}
//这里设置了默认值,发送的时候只用指定数据和长度SendPacket((void *)dataBuf,dataLen)。
//否则发送时需指定后三个参数,例如SendPacket((void *)dataBuf,dataLen,0,false,10)。
m_session.SetDefaultPayloadType(0);
m_session.SetDefaultMark(false);
m_session.SetDefaultTimestampIncrement(10.0);
m_session.SetMaximumPacketSize(65535);
}
void CRtpThread::rtpSendData(uchar *dataBuf, int dataLen)
{
int status = m_session.SendPacket((void *)dataBuf,dataLen);
if (status < 0)
{
qDebug() << RTPGetErrorString(status).c_str();
}
}