【发布时间】:2013-08-06 13:13:08
【问题描述】:
我正在交叉编译一个包(libqmi)。(通过简单的编译就可以了。)
当我尝试遵守 c++ 部分时,问题就出现了。 我收到的消息是
"read is not declared".
我知道在 C 的情况下不需要包含它,但是 C++ 呢?
我尝试手动添加标题:fcntl.h 和 unistd.h 也没有任何解决方案。
(编译器找到并包含,但错误信息仍然存在)
您知道这背后的问题是什么吗? 我不认为这个问题是错误的,因为它是一个已实现且良好的宿主编译器。
编辑: 感谢 cmets。 主机:Linux、x86、 目标:Linux、手臂
unistd.h 头文件没有解决问题: 我也试过type alloc,可能有misalloc。 GobiQMICore.cpp: 在成员函数'virtual std::vector, std::basic_string >> cGobiQMICore::GetAvailableDevices()'中: GobiQMICore.cpp:319:39:错误:未在此范围内声明“读取” GobiQMICore.cpp:334:21: 错误: 'close' 未在此范围内声明
代码:
/*===========================================================================
METHOD:
GetAvailableQDLPorts (Public Method)
DESCRIPTION:
Return the set of available Gobi QDL ports
RETURN VALUE:
std::vector <sDeviceID>
===========================================================================*/
std::vector <std::string> cGobiQDLCore::GetAvailableQDLPorts()
{
std::vector <std::string> devices;
std::string path = "/sys/bus/usb/devices/";
std::vector <std::string> files;
DepthSearch( path,
2,
"ttyUSB",
files );
int fileNum = files.size();
for (int i = 0; i < fileNum; i++)
{
// Example "/sys/bus/usb/devices/8-1/8-1:1.1/ttyUSB0"
std::string nodePath = files[i];
int lastSlash = nodePath.find_last_of( "/" );
// This is what we want to return if everything else matches
std::string deviceNode = nodePath.substr( lastSlash + 1 );
// Move down one directory to the interface level
std::string curPath = nodePath.substr( 0, lastSlash );
// Read bInterfaceNumber
int handle = open( (curPath + "/bInterfaceNumber").c_str(),
O_RDONLY );
if (handle == -1)
{
continue;
}
char buff[4];
memset( buff, 0, 4 );
bool bFound = false;
int ret = read( handle, buff, 2 );
if (ret == 2)
{
// Interface 1 or 0
ret = strncmp( buff, "01", 2 );
if (ret == 0)
{
bFound = true;
}
ret = strncmp( buff, "00", 2 );
if (ret == 0)
{
bFound = true;
}
}
close( handle );
if (bFound == false)
{
continue;
}
// Move down one directory to the device level
curPath = curPath.substr( 0, curPath.find_last_of( "/" ) );
// Read idVendor
handle = open( (curPath + "/idVendor").c_str(), O_RDONLY );
if (handle == -1)
{
continue;
}
bFound = false;
ret = read( handle, buff, 4 );
if (ret == 4)
{
ret = strncmp( buff, "05c6", 4 );
if (ret == 0)
{
bFound = true;
}
}
close( handle );
if (bFound == false)
{
continue;
}
// Read idProduct
handle = open( (curPath + "/idProduct").c_str(), O_RDONLY );
if (handle == -1)
{
continue;
}
bFound = false;
ret = read( handle, buff, 4 );
if (ret == 4)
{
ret = strncmp( buff, "920c", 4 );
if (ret == 0)
{
bFound = true;
}
}
close( handle );
if (bFound == false)
{
continue;
}
// Success!
devices.push_back( deviceNode );
}
return devices;
}
T
【问题讨论】:
-
交叉编译的目标是什么?我假设 Linux 是主机?
-
您的问题应该通过包含
unistd.h来解决。正如您所说的,您已经包含了,所以请确保您将其包含在所需且正确的c文件中。 -
显示一些带有
read()的代码! -
我刚刚修改了问题,添加了一些附加信息,根据您的 cmets。谢谢
-
您向我们展示的代码没有
#include指令,因此它应该为您提供read以及std::、DepthSearch等的错误。你说你的代码中有#include <unistd.h>。 向我们展示该代码。向我们展示与您的真实代码相似的内容是没有用的。
标签: c++ c linux compiler-construction compiler-errors