Я пытаюсь использовать libfdt для анализа файлов больших двоичных объектов дерева устройств.
Вы можете установить libfdt на любой Ubuntu: sudo apt-get install libfdt-dev
Я пишу простую тестовую программу для использования одного из API:
#include <vector>
#include <iostream>
#include <libfdt.h>
#include <fstream>
std::vector<char>
read_binary(const std::string& fnm)
{
if (fnm.empty())
throw std::runtime_error("No file specified");
// load the file
std::ifstream stream(fnm);
if (!stream)
throw std::runtime_error("Failed to open file '" + fnm + "' for reading");
stream.seekg(0, stream.end);
size_t size = stream.tellg();
stream.seekg(0, stream.beg);
std::vector<char> binary(size);
stream.read(binary.data(), size);
return binary;
}
int main ()
{
std::vector<char> binary = read_binary("metadata.dtb");
const void* fdt = binary.data();
int offset = fdt_path_offset(fdt,"/interfaces");
std::cout << offset << std::endl;
return 0;
}
Я компилирую/связываю с:
g++ main.cpp -lfdt
Компиляция прошла успешно, но линковка не удалась. Я не понимаю, почему. Я вижу, что в библиотеке есть символы. Библиотека существует в пути поиска по умолчанию. Компоновщик может найти библиотеку.
Ошибка линкера:
main.cpp: undefined reference to `fdt_path_offset(void const*, char const*)'