я кросс компиляции пакета (libqmi
). (С простой компиляции, это было прекрасно.)чтения не было объявлено сообщение об ошибке
Проблема возникла, когда я пытался выполнить C++ часть. Я получил сообщение
"read is not declared"
.
Я знаю, что он не должен быть включен в случае C, но как насчет C++?
Я попытался добавить заголовки вручную: fcntl.h
и unistd.h
тоже, без какого-либо решения. (компилятор нашел их и включил, но сообщение об ошибке все еще осталось)
Вы хоть представляете, что проблема может быть за этим? Я не думаю, что проблема неправильная, так как она реализована и хороша с компилятором хоста.
EDIT: благодарит за комментарии. хост: Linux, x86, цель: Linux, рука
unistd.h заголовок не решил проблему: Я также попытался типа Alloc, может быть, есть misalloc. GobiQMICore.cpp: В функции-члене 'virtual std :: vector, std :: basic_string>> cGobiQMICore :: GetAvailableDevices()': GobiQMICore.cpp: 319: 39: ошибка: «чтение» не было объявлено в этой области GobiQMICore.cpp: 334: 21: ошибка: 'закрыть' не был объявлен в этой области
код:
/*===========================================================================
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()' в нем! –