ethpip头文件
⑴ C++获取网卡ID用哪个函数谢谢。
如果是windows sdk,iphlpapi.lib库中是用IP_ADAPTER_INFO结构体存储网卡信息的
// 头文件包含
#include "stdafx.h"
#include <WinSock2.h>
#include <Iphlpapi.h>
#include <iostream>
using namespace std;
// 函数声明
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
// 程序入口
int _tmain(int argc, _TCHAR* argv[])
{
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
//得到结构体大小,用于GetAdaptersInfo参数
unsigned long stSize = sizeof(IP_ADAPTER_INFO);
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
if (ERROR_BUFFER_OVERFLOW==nRel)
{
//如果函数返回的是ERROR_BUFFER_OVERFLOW
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
//这也是说明为什么stSize既是一个输入量也是一个输出量
//释放原来的内存空间
delete pIpAdapterInfo;
//重新申请内存空间用来存储所有网卡信息
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
}
if (ERROR_SUCCESS==nRel)
{
//输出网卡信息
output(pIpAdapterInfo);
}
//释放内存空间
if (pIpAdapterInfo)
{
delete pIpAdapterInfo;
}
getchar();
return 0;
}
///函数作用,输出网卡信息
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
{
//可能有多网卡,因此通过循环去判断
while (pIpAdapterInfo)
{
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
if (i==pIpAdapterInfo->AddressLength-1)
{
printf("%02x\n", pIpAdapterInfo->Address[i]);
}
else
{
printf("%02x-", pIpAdapterInfo->Address[i]);
}
cout<<"网卡IP地址如下:"<<endl;
//可能网卡有多IP,因此通过循环去判断
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
do
{
cout<<pIpAddrString->IpAddress.String<<endl;
pIpAddrString=pIpAddrString->Next;
} while (pIpAddrString);
pIpAdapterInfo = pIpAdapterInfo->Next;
cout<<"*****************************************************"<<endl;
}
return;
}
⑵ 解析IP数据包。下面的代码放在VC++里面运行时,有一处错误,不知道该怎么改过来。
#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <linux/if_ether.h>#include <net/ethernet.h>#include <errno.h>#include <netinet/tcp.h>#include <netinet/udp.h>
包含的这些文件你确定你都有么?
另外,你只说有一处错误,不告诉是什么错误
你这程序里很多东西根本是别人机器不可能有的东西,根本不可能看出来。
问问题还搞的自己跟个大爷一样,代码一贴了事,网上的人都欠你的?
不吐不快
⑶ C++中用哪个函数可以获得当前网卡的物理地址
//如果是Windows
//
//.
(
_In_ULONGFamily,
_In_ULONGFlags,
_In_PVOIDReserved,
_Inout_PIP_ADAPTER_ADDRESSESAdapterAddresses,
_Inout_PULONGSizePointer
);
/*
Family[in]
.这个参数必须是以下值之一.
AF_UNSPEC返回开启IPv4和IPv6的适配器的IPv4和IPv6地址.
AF_INET返回开启IPv4的适配器的IPv4地址.
AF_INET6只返回开启IPv6的适配器的IPv6地址.
------------------------------------------------------------------------------
Flags[in]
需要得到的地址类型.可能值在头文件Iptypes.h中定义.注意到Iptypes.h自动包含在Iphlpapi.h里面,应该永远不要直接使用它.这个参数可以是以下值的组合.如果此参数是0,那么单播、任播、多播IP地址都将会返回.
------------------------------------------------------------------------------
Reserved[in]
这个参数现在未使用,但是是保留为了将来系统使用,在这个调用应该给予NULL.
------------------------------------------------------------------------------
AdapterAddresses[in,out]
一个指针指向缓冲区,函数成功返回时,用来保存IP_ADAPTER_ADDRESSES结构的链表.
------------------------------------------------------------------------------
SizePointer[in,out]
一个指针,指向"表明AdapterAddress指向的缓冲区大小的变量".
--------------------------------------------------------------------------
返回值
如果函数成功,返回值为ERROR_SUCCESS(definedtothesamevalueasNO_ERROR).
如果函数失败,返回值是以下错误值之一.
*/
//C++示例代码
//来源于MSDN
#include<winsock2.h>
#include<iphlpapi.h>
#include<stdio.h>
#include<stdlib.h>
//LinkwithIphlpapi.lib
#pragmacomment(lib,"IPHLPAPI.lib")
#defineWORKING_BUFFER_SIZE15000
#defineMAX_TRIES3
#defineMALLOC(x)HeapAlloc(GetProcessHeap(),0,(x))
#defineFREE(x)HeapFree(GetProcessHeap(),0,(x))
/*Note:couldalsousemalloc()andfree()*/
int__cdeclmain(intargc,char**argv)
{
/*Declareandinitializevariables*/
DWORDdwSize=0;
DWORDdwRetVal=0;
unsignedinti=0;
//
ULONGflags=GAA_FLAG_INCLUDE_PREFIX;
//(both)
ULONGfamily=AF_UNSPEC;
LPVOIDlpMsgBuf=NULL;
PIP_ADAPTER_ADDRESSESpAddresses=NULL;
ULONGoutBufLen=0;
ULONGIterations=0;
PIP_ADAPTER_ADDRESSESpCurrAddresses=NULL;
PIP_ADAPTER_UNICAST_ADDRESSpUnicast=NULL;
PIP_ADAPTER_ANYCAST_ADDRESSpAnycast=NULL;
PIP_ADAPTER_MULTICAST_ADDRESSpMulticast=NULL;
IP_ADAPTER_DNS_SERVER_ADDRESS*pDnServer=NULL;
IP_ADAPTER_PREFIX*pPrefix=NULL;
if(argc!=2){
printf("Usage:getadapteraddressesfamily ");
printf("getadapteraddresses4(forIPv4) ");
printf("getadapteraddresses6(forIPv6) ");
printf("getadapteraddressesA(forbothIPv4andIPv6) ");
exit(1);
}
if(atoi(argv[1])==4)
family=AF_INET;
elseif(atoi(argv[1])==6)
family=AF_INET6;
printf("=");
if(family==AF_INET)
printf("AF_INET ");
if(family==AF_INET6)
printf("AF_INET6 ");
if(family==AF_UNSPEC)
printf("AF_UNSPEC ");
//.
outBufLen=WORKING_BUFFER_SIZE;
do{
pAddresses=(IP_ADAPTER_ADDRESSES*)MALLOC(outBufLen);
if(pAddresses==NULL){
printf
("MemoryallocationfailedforIP_ADAPTER_ADDRESSESstruct ");
exit(1);
}
dwRetVal=
GetAdaptersAddresses(family,flags,NULL,pAddresses,&outBufLen);
if(dwRetVal==ERROR_BUFFER_OVERFLOW){
FREE(pAddresses);
pAddresses=NULL;
}else{
break;
}
Iterations++;
}while((dwRetVal==ERROR_BUFFER_OVERFLOW)&&(Iterations<MAX_TRIES));
if(dwRetVal==NO_ERROR){
//Ifsuccessful,
pCurrAddresses=pAddresses;
while(pCurrAddresses){
printf(" LengthoftheIP_ADAPTER_ADDRESSstruct:%ld ",
pCurrAddresses->Length);
printf(" IfIndex(IPv4interface):%u ",pCurrAddresses->IfIndex);
printf(" Adaptername:%s ",pCurrAddresses->AdapterName);
pUnicast=pCurrAddresses->FirstUnicastAddress;
if(pUnicast!=NULL){
for(i=0;pUnicast!=NULL;i++)
pUnicast=pUnicast->Next;
printf(" NumberofUnicastAddresses:%d ",i);
}else
printf(" NoUnicastAddresses ");
pAnycast=pCurrAddresses->FirstAnycastAddress;
if(pAnycast){
for(i=0;pAnycast!=NULL;i++)
pAnycast=pAnycast->Next;
printf(" NumberofAnycastAddresses:%d ",i);
}else
printf(" NoAnycastAddresses ");
pMulticast=pCurrAddresses->FirstMulticastAddress;
if(pMulticast){
for(i=0;pMulticast!=NULL;i++)
pMulticast=pMulticast->Next;
printf(" NumberofMulticastAddresses:%d ",i);
}else
printf(" NoMulticastAddresses ");
pDnServer=pCurrAddresses->FirstDnsServerAddress;
if(pDnServer){
for(i=0;pDnServer!=NULL;i++)
pDnServer=pDnServer->Next;
printf(" NumberofDNSServerAddresses:%d ",i);
}else
printf(" NoDNSServerAddresses ");
printf(" DNSSuffix:%wS ",pCurrAddresses->DnsSuffix);
printf(" Description:%wS ",pCurrAddresses->Description);
printf(" Friendlyname:%wS ",pCurrAddresses->FriendlyName);
if(pCurrAddresses->PhysicalAddressLength!=0){
printf(" Physicaladdress:");
for(i=0;i<(int)pCurrAddresses->PhysicalAddressLength;
i++){
if(i==(pCurrAddresses->PhysicalAddressLength-1))
printf("%.2X ",
(int)pCurrAddresses->PhysicalAddress[i]);
else
printf("%.2X-",
(int)pCurrAddresses->PhysicalAddress[i]);
}
}
printf(" Flags:%ld ",pCurrAddresses->Flags);
printf(" Mtu:%lu ",pCurrAddresses->Mtu);
printf(" IfType:%ld ",pCurrAddresses->IfType);
printf(" OperStatus:%ld ",pCurrAddresses->OperStatus);
printf(" Ipv6IfIndex(IPv6interface):%u ",
pCurrAddresses->Ipv6IfIndex);
printf(" ZoneIndices(hex):");
for(i=0;i<16;i++)
printf("%lx",pCurrAddresses->ZoneIndices[i]);
printf(" ");
printf(" Transmitlinkspeed:%I64u ",pCurrAddresses->TransmitLinkSpeed);
printf(" Receivelinkspeed:%I64u ",pCurrAddresses->ReceiveLinkSpeed);
pPrefix=pCurrAddresses->FirstPrefix;
if(pPrefix){
for(i=0;pPrefix!=NULL;i++)
pPrefix=pPrefix->Next;
printf(":%d ",i);
}else
printf(":0 ");
printf(" ");
pCurrAddresses=pCurrAddresses->Next;
}
}else{
printf(":%d ",
dwRetVal);
if(dwRetVal==ERROR_NO_DATA)
printf("\n");
else{
if(FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|
FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,dwRetVal,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
//Defaultlanguage
(LPTSTR)&lpMsgBuf,0,NULL)){
printf(" Error:%s",lpMsgBuf);
LocalFree(lpMsgBuf);
if(pAddresses)
FREE(pAddresses);
exit(1);
}
}
}
if(pAddresses){
FREE(pAddresses);
}
return0;
}
⑷ python2怎么创建虚拟工作环境
1、安装和使用pip
pip 是一个Python包管理工具,主要是用于安装 PyPI 上的软件包,可以部分替代 easy_install 工具。
1.1 安装pip
sudo apt-get install pip
1.2 升级pip
pip install --upgrade pip
1.3 基本的pip命令
安装一个包,如flask:
pip install flask
升级一个包,如flask
pip install --upgrade flask
卸载一个包,如flask
pip uninstall flask
2、安装和使用virtualenv
virtualenv类似于一个小型版的虚拟机,它可以创建一个独立的使用环境,我们在这个环境下所做的一切安装和卸载都不会影响它之外的操作系统环境,这样我们就依靠virtualenv创建了一个相对纯净的开发环境。
2.1安装virtualenv
sudo apt-get install python-virtualenv
安装好了之后,我们就可以使用virtualenv来创建虚拟环境了,可以先使用 virtualenv --version来查看下virtualenv环境的版本:
[plain] view plain print?在CODE上查看代码片派生到我的代码片
hyman@hyman-VirtualBox:~$ virtualenv --version
15.0.1
2.2 创建虚拟环境
比如说我们想在~/projects/blog/目录下创建一个名叫env的虚拟环境,使用下面的命令。
[plain] view plain print?在CODE上查看代码片派生到我的代码片
virtualenv ~/projects/blog/env
创建完成后会在~/projects/blog/env目录下生成bin、include、lib等几个目录,其中,bin 目录中包含一些在这个虚拟环境中可用的命令,以及开启虚拟环境的脚本 activate;include 中包含虚拟环境中的头文件,包括 Python 的头文件;lib 中就是一些依赖库。
2.4 激活虚拟环境
[plain] view plain print?在CODE上查看代码片派生到我的代码片
source ~/projects/blog/env/bin/activate
2.5 退出虚拟环境
[plain] view plain print?在CODE上查看代码片派生到我的代码片
deactivate
通常情况下很多童鞋都喜欢使用virtualenvwrapper来对virtualenv进行管理,这样在创建、激活虚拟环境方面的确比较方便,但是我个人不喜欢这种用法,因为virtualenvwrapper是把所有的虚拟环境都放到一起集中进行处理,而我个人比较喜欢虚拟环境和开发项目集中在一起,然后push到github中,这样才算是一个完整的项目,在pull下来之后才能完整运行。
⑸ 用LINUX C命名管道实现进程间通信的题目,已写出代码,但有一个神奇的小问题,open路径正确却有时失败
通常管道创建的时候会出现创建不成功的情况,要在管道创建的时候就进行异常处理,如果创建不成功就重新创建,这个错误是找不到管道文件
⑹ bonding后交换机怎么配置
一、什么是bonding 多块网卡绑在一起,作为一个网卡用,实现负载均衡和提高带宽,linux双网卡绑定一个IP地址,实质工作就是使用两块网卡虚拟为一块,使用同一个IP地址,是我们能够得到更好的更快的服务。 二、配置过程 配置很简单,一共四个步骤: 实验的操作系统是Redhat Linux Enterprise 3.0 绑定的前提条件:芯片组型号相同,而且网卡应该具备自己独立的BIOS芯片。 1.编辑虚拟网络接口配置文件,指定网卡IP 代码如下: vi /etc/sysconfig/ network-scripts/ ifcfg-bond0 p[[emailprotected] root]# cp /etc/sysconfig/network-scripts/ifcfg-eth0 ifcfg-bond0 将第一行改成 DEVICE=bond0 代码如下: # cat ifcfg-bond0 pDEVICE=bond0 pBOOTPROTO=static pIPADDR=172.31.0.13 pNETMASK=255.255.252.0 pBROADCAST=172.31.3.254 pONBOOT=yes pTYPE=Ethernet 这里要主意,不要指定单个网卡的IP 地址、子网掩码或网卡 ID。将上述信息指定到虚拟适配器(bonding)中即可。 代码如下: [[emailprotected] network-scripts]# cat ifcfg-eth0 pDEVICE=eth0 pONBOOT=yes pBOOTPROTO=dhcp p[[emailprotected] network-scripts]# cat ifcfg-eth1 pDEVICE=eth0 pONBOOT=yes pBOOTPROTO=dhcp 3 # vi /etc/moles.conf 编辑 /etc/moles.conf 文件,加入如下一行内容,以使系统在启动时加载bonding模块,对外虚拟网络接口设备为 bond0 加入下列两行 代码如下: alias bond0 bonding poptions bond0 miimon=100 mode=1 说明:miimon是用来进行链路监测的。 比如:miimon=100,那么系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线路;mode的值表示工作模式,他共有0,1,2,3四种模式,常用的为0,1两种。 mode=0表示load balancing (round-robin)为负载均衡方式,两块网卡都工作。 mode=1表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份. bonding只能提供链路监测,即从主机到交换机的链路是否接通。如果只是交换机对外的链路down掉了,而交换机本身并没有故障,那么bonding会认为链路没有问题而继续使用 4 # vi /etc/rc.d/rc.local 加入两行 代码如下: ifenslave bond0 eth0 eth1 proute add -net 172.31.3.254 netmask 255.255.255.0 bond0 到这时已经配置完毕重新启动机器. 重启会看见以下信息就表示配置成功了 ................ Bringing up interface bond0 OK Bringing up interface eth0 OK Bringing up interface eth1 OK Bonding的工作模式 Linux Bonding默认使用轮转策略。 基本类别是主备模式与负载均衡两种模式: balance-rr (mode=0) 轮转(Round-robin)策略:从头到尾顺序的在每一个slave接口上面发送数据包。本模式提供负载均衡和容错的能力。 active-backup(mode=1) 活动-备份(主备)策略:在绑定中,只有一个slave被激活。当且仅当活动的slave接口失败时才会激活其他slave。为了避免交换机发生混乱此时绑定的MAC地址只有一个外部端口上可见。在bongding的2.6.2及其以后的版本中,主备模式下发生一次故障迁移时,bonding将在新激活的slave上会送一个或者多个gratuitous ARP.bonding的主salve接口上以及配置在接口上的所有VLAN接口都会发送gratuitous ARP,只要这些接口上配置了至少一个IP地址。VLAN接口上发送的的gratuitous ARP将会附上适当的VLAN id。本模式提供容错能力,primary option,documented below会影响本模式的行为。 balance-xor(mode=2) XOR策略:基于所选择的传送hash策略。 本模式提供负载均衡和容错的能力。 broadcast(mode=3) 广播策略:在所有的slave接口上传送所有的报文。本模式提供容错能力。 802.3ad(mode=4) IEEE 802.3ad 动态链路聚合。创建共享相同的速率和双工模式的聚合组。能根据802.3ad规范利用所有的slave来建立聚合链路。Salve的出站选择取决于传输的hash策略,默认策略是简单的XOR策略,而hash策略则可以通xmit_hash_policy选项加以改变。需要注意的是:不是所有的传输策略都与802.3ad兼容,尤其是802.3ad标准的43.2.4章节中关于 packet mis-ordering要求的地方。不同个体的实现往往出现很大的不兼容。 先决条件: 1. 每个slave的基本驱动支持Ehtool获取速率和双工状态。 2.交换机支持IEEE 802.3ad动态链路聚合。大多数的交换机都需要使用某种配置方式来启用802.3ad模式。 balance-tlb(mode=5) 自适应传输负载均衡:信道绑定不需要特殊的交换机支持。出口流量的分布取决于当前每个slave的负载(计算相对速度)。进口流量从当前的slave的接收。如果接收salve出错,其他的slave接管失败的slave的MAC地址继续接收。 先决条件: 每个slave的基本驱动支持Ehtool获取速率状态。 balance-alb(mode=6) 自适应负载均衡:包括balance-tlb(模式5)以及用于IPV4流量的接收负载均衡,并且不需要特殊的交换机支持。接收负载均衡通过ARP协商实现。bonding的驱动拦截本机发出的ARP Replies(ARP回应报文),并且用bond的某一个slave的硬件地址改写ARP报文的源地址,使得本服务器对不同的设备使用不同的硬件地址。本服务器建立的连接的接收流量也是负载均衡的。当本机发送ARP Request时,bonding驱动通过ARP报文复制并保存节点的IP信息。当从其他节点接收到ARP Reply,bonding驱动获取节点的硬件地址并且会回应一个包含绑定好的slave的硬件地址的ARP Reply给发送的节点。用ARP协商的负载均衡的有一个问题是每次用bond的硬件地址广播ARP报文,那么其他节点发送的数据全部集中在一个slave上,处理ARP更新给其他所有节点的时候,每个节点会重新学习硬件地址,导致流量重新分配。当新加入一个slave或者一个非激活的slave重新激活的时候也会导致接收流量重新分配。接收流量负载是串行(轮转)的分配在bond的一组速率最高的slave上。
⑺ pip install app 失败怎么解决
可以试试使用wheel,这是一种二进制格式,不需要编译。首先使用pip install --upgrade pip setuptools wheel将pip升级到最新版,然后重新尝试pip install,如果有作者打好的二进制wheel包就会使用wheel,不需要重新编译。从源码安装带有C扩展的第三方包不仅需要安装VC++编译器,还经常需要安装和配置相应的C库SDK的include和lib目录,是比较麻烦的。
如果作者没打wheel包,就只能看日志是缺少哪个头文件,然后去安装包含这个头文件的SDK了。
⑻ c++ 论坛 如何利用C++ 来获取本机网卡信息
// 头文件包含
#include "stdafx.h"
#include <WinSock2.h>
#include <Iphlpapi.h>
#include <iostream>
usingnamespace std;
// 函数声明
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
// 程序入口
int _tmain(int argc, _TCHAR* argv[])
{
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
PIP_ADAPTER_INFO pIpAdapterInfo =new IP_ADAPTER_INFO();
//得到结构体大小,用于GetAdaptersInfo参数
unsigned long stSize =sizeof(IP_ADAPTER_INFO);
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
if (ERROR_BUFFER_OVERFLOW==nRel)
{
//如果函数返回的是ERROR_BUFFER_OVERFLOW
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
//这也是说明为什么stSize既是一个输入量也是一个输出量
//释放原来的内存空间
delete pIpAdapterInfo;
//重新申请内存空间用来存储所有网卡信息
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);
}
if (ERROR_SUCCESS==nRel)
{
//输出网卡信息
output(pIpAdapterInfo);
}
//释放内存空间
if (pIpAdapterInfo)
{
delete pIpAdapterInfo;
}
getchar();
return0;
}
///函数作用,输出网卡信息
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
{
//可能有多网卡,因此通过循环去判断
while (pIpAdapterInfo)
{
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
for (UINT i =0; i < pIpAdapterInfo->AddressLength; i++)
if (i==pIpAdapterInfo->AddressLength-1)
{
printf("%02x\n", pIpAdapterInfo->Address[i]);
}
else
{
printf("%02x-", pIpAdapterInfo->Address[i]);
}
cout<<"网卡IP地址如下:"<<endl;
//可能网卡有多IP,因此通过循环去判断
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
do
{
cout<<pIpAddrString->IpAddress.String<<endl;
pIpAddrString=pIpAddrString->Next;
} while (pIpAddrString);
pIpAdapterInfo = pIpAdapterInfo->Next;
cout<<"*****************************************************"<<endl;
}
return;
}
⑼ ccs工程的头文件找不到,怎么回事
1、要在Memory Section Manager属性中为“Segment For DSP/BIOS Objects” 和 “Segment For malloc()/free()”分配Dynamic Memory Heaps,必须首先在要分配的段(比如,IRAM)中勾选“create a heap in this memory“,并给出heaps size。
2、要把*.tcf文件生成的*.cmd文件手动加入工程中,否则编译报错如下:
------------------------------ test.pjt - Debug ------------------------------
Warning: The project has no cmd file while the Text Linker is selected
[Linking...] "D:\CCStudio_v3.3\C6000\cgtools\bin\cl6x" -@"Debug.lkf"
<Linking>
>> warning: creating output section .gblinit without SECTIONS specification
>> warning: creating output section .mem without SECTIONS specification
>> warning: creating output section .rtdx_data without SECTIONS specification
>> warning: creating output section .sys without SECTIONS specification
>> warning: creating output section .clk without SECTIONS specification
>> warning: creating output section .hst1 without SECTIONS specification
>> warning: creating output section .hst without SECTIONS specification
>> warning: creating output section .pip without SECTIONS specification
>> warning: creating output section .hst0 without SECTIONS specification
>> warning: creating output section .hwi_vec without SECTIONS specification
>> warning: creating output section .swi without SECTIONS specification
>> warning: creating output section .printf without SECTIONS specification
>> warning: creating output section .sts without SECTIONS specification
>> warning: creating output section .tsk without SECTIONS specification
>> warning: creating output section .TSK_idle$stk without SECTIONS specification
>> warning: creating output section .idlcal without SECTIONS specification
>> warning: creating output section .idl without SECTIONS specification
>> warning: creating output section .LOG_system$buf without SECTIONS
specification
>> warning: creating output section .log without SECTIONS specification
>> warning: creating output section .sysinit without SECTIONS specification
>> warning: creating output section .vers without SECTIONS specification
>> warning: entry point symbol _c_int00 undefined
undefined first referenced
symbol in file
--------- ----------------
SWI_D_rdytab d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
IRAM$B d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_EXC_init d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_GBL_procId d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
__HOOK_knlId d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_KNL_exit d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
IRAM$L d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
TSK_VCREATEFXN d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_UTL_doError d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
PIP_F_start d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
GBL_boot d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
TSK_VDELETEFXN d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
KNL_glue d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_UTL_doAbort d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
IDL_F_loop d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_CLK_DFLTMICROSECS d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_GBL_cacheInit64P d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_EXC_dispatch d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_CLK_htimePerLtime d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
GBL_stackbeg d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_CLK_D_tddr d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_UTL_doPutc d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_MEM d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
PRD_F_tick d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
__HOOK_NUMHOOKS d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_CLK_D_microseconds d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
RTA_F_or d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
TRC_R_mask d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
GBL_stackend d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_c_int00 d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_TSK_config d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_OBJ_table d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
HWI_A_VECS d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_FXN_F_nop d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_CLK_enableTimer d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_CLK_D_prd d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
IDL_D_calibrate d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_TSK d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_KNL_run d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
LNK_dspFrameRequestMask d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
CLK_F_isr d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
PIP_D_tabbeg d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
TRC_cinit d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_UTL_halt d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_MEM_init d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
RTA_F_dispatch d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_TSK_startup d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_TSK_setup d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_KNL_queues d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
CLK_A_TABBEG d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
LNK_F_dataPump d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
TSK_VEXITFXN d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
HWI_F_dispatch d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_RTDX_Poll d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_TSK_init d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
IDL_D_busyObj d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_TSK_exit d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
SWI_F_enable d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
FXN_F_run d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_GBL_getVersion d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_CLK_inputClock d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
GBL_initdone d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
_HWI_dispatchTab d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
LNK_dspFrameReadyMask d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
IDL_F_busy d:\\CCStudio_v3.3\\myprojects\\test\\Debug\\testcfg.obj
>> error: symbol referencing errors - './Debug/test.out' not built
>> Compilation failure
Build Complete,
2 Errors, 23 Warnings, 0 Remarks.
3、
[main.c] "D:\CCStudio_v3.3\C6000\cgtools\bin\cl6x" -g -pdsw225 -fr"D:/CCStudio_v3.3/MyProjects/test/Debug" -d"_DEBUG" -me -mv6400+ -@"Debug.lkf" "main.c"
"main.c", line 20: warning: function declared implicitly
[Linking...] "D:\CCStudio_v3.3\C6000\cgtools\bin\cl6x" -@"Debug.lkf"
<Linking>
Build Complete,
0 Errors, 1 Warnings, 0 Remarks.
warning 的原因是对应行的元素没有声明。
解决办法就是加入声明。
举例如下:
#include <std.h>
#include <string.h>
//#include <stdio.h> //打开该句就可以了
void main(void)
{
unsigned int i;
unsigned int sum=0;
for(i = 0; i<=100; i++ )
{
sum += i;
}
printf("the sum = %d .\n",sum);
printf("the program run over!\n");
printf("the program run over!\n");