Я работаю над (C ++) программой, которая должна обрабатывать много информации, связанной с файлом / каталогом (поэтому более или менее у меня есть путь в качестве ключа). В настоящее время я пытался реализовать с использованием хеш-таблиц. Кажется, это работает достаточно хорошо, учитывая объем данных, но после профилирования я обнаружил, что они все еще являются самым медленным звеном в системе, поэтому для улучшения я рассмотрю использование Trie.
Я нахожу следующее (реализация C) http://linux.thai.net/~thep/datrie/datrie.html и, читая документацию, кажется, это довольно хорошо. Однако, пытаясь написать простой тестовый фрагмент, я получаю странную ошибку ссылки.
Странная вещь: рассматриваемая функция существует (как в ее там, и в файле cpp), так и объектные файлы создаются, так почему для нее существует ошибка ссылки?
Мой код:
#include <iostream>
#include <datrie/trie.h>
extern int main(int, char**)
{
// create character map covering unicode characters
AlphaMap *map = alpha_map_new();
AlphaChar start = 32, end = 1114111;
alpha_map_add_range(map, start, end);
// create a trie and test it
Trie *test = trie_new(map);
const AlphaChar key[] = {0x64,0x64,0x64,0x64};
trie_store(test, key, 3);
TrieData *data;
trie_retrieve(test, key, data);
std::cout << *data << std::endl;
return 0;
}
Ошибка (упрощена и обернута для удобства чтения)
main.obj : error LNK2001: unresolved external symbol
"int __cdecl alpha_map_add_range(struct _AlphaMap *,unsigned int,unsigned int)"
main.obj : error LNK2001: unresolved external symbol
"struct _AlphaMap * __cdecl alpha_map_new(void)"
Использование Visual Studio 2010