ns-3 waf linking error (неопределенные ссылки) - PullRequest
0 голосов
/ 11 октября 2018

В настоящее время у меня возникают проблемы при попытке использовать код из библиотеки gcrypt в ns-3 из-за ошибки компоновки после вызова ./waf.Я правильно установил gcrypt, так как приведенная ниже программа отлично работает при компиляции с g++ test.cpp -o test -lgcrypt.

#include <stdio.h>
#include <gcrypt.h>

int main(void)
{
    char *s = "some text";
    unsigned char *x;
    unsigned i;
    unsigned int l = gcry_md_get_algo_dlen(GCRY_MD_SHA256); /* get digest length (used later to print the result) */

    gcry_md_hd_t h;
    gcry_md_open(&h, GCRY_MD_SHA256, GCRY_MD_FLAG_SECURE); /* initialise the hash context */
    gcry_md_write(h, s, strlen(s)); /* hash some text */
    x = gcry_md_read(h, GCRY_MD_SHA256); /* get the result */

    for (i = 0; i < l; i++)
    {
        printf("%02x", x[i]); /* print the result */
    }
    printf("\n");
    return 0;
}

Однако репликация этого кода в ns-3 приводит к множественным ошибкам, аналогичным следующей ошибке при соединении:

/home/xxx/Desktop/ns-allinone-3.28.1/ns-3.28.1/build/../scratch/ns3consensus/AppCons.cc:251: undefined reference to `gcry_md_get_algo_dlen'

Кроме того, сама ns-3, похоже, распознает, что gcrypt установлен, поскольку вывод ./waf configure указывает, что библиотека gcrypt установлена ​​с Gcrypt library : enabled.

Я добавилк верхнему уровню wscript conf.env.append_value("LINKFLAGS", ["-lgcrypt"]), как предлагает https://www.nsnam.org/wiki/HOWTO_use_ns-3_with_other_libraries, проблема остается, однако.Есть ли что-то еще, что мне нужно, чтобы добавить wscript, или есть какие-то другие принципы связывания, которые мне не хватает?

1 Ответ

0 голосов
/ 15 октября 2018

Ответ на этот вопрос заключается в том, как библиотеки включаются в waf.

  • Включения добавляются cfg.env.append_value('INCLUDES', ['/usr/local/include']),
  • Пути поиска библиотек добавляются conf.env.append_value('LIBPATH', ["/usr/local/lib"])и
  • при проверке / компиляции / связывании вы используете ключевое слово use = name_of_the_library , поэтому здесь здесь это будет use='gcrypt'.
...