компиляция — Использование библиотеки Keccak в проекте C ++

Я пытаюсь использовать Пакет кодов Кекчак в проекте, особенно расширяемая хеш-функция SHAKE128. Я выполнил их инструкции по компиляции библиотеки и получил две папки, одна из которых libkeccak.a и полон файлы, другой libkeccak.a.headers и полон .час.

Теперь структура моего проекта выглядит следующим образом:

Project
|
+ -- MakeFile
|
+ -- Lamport
|     |
|     + -- lamportOTS.cpp
|
+ --libkeccak.a
|     |
|     + -- *.o
|
+ -- libkeccak.a.headers
|     |
|     + -- *.h

Функция, которую я хочу использовать, указана в libkeccak.a.headers / SimpleFIPS202.h. Поэтому я включил заголовочный файл. Однако я не могу найти, как правильно скомпилировать. Я пытался:

 g++ -c Lamport/lamportOTS.cpp
g++ lamportOTS.o libkeccak.a/SImpleFIPS202.o

Он находит функцию SHAKE128, но не может скомпилировать, так как разные файлы кажутся взаимозависимыми. Вот эскиз lamportOTS.cpp

#include "../libkeccak.a.headers/SimpleFIPS202.h"
void sign(unsigned char* message, unsigned char* signature, unsigned char*** key){

unsigned char randombits[2][256][32];

...

/* Apply SHAKE128 to each value */
for(int i = 0; i != 2; i++){
for(int j = 0; j!= 256;j++){
SHAKE128(key[i][j],32, randombits[i][j], 32);
}
}

}

РЕДАКТИРОВАТЬ:
Подробности об ошибке компиляции были запрошены в комментариях. Бег

g++ lamportOTS.o libkeccak.a/SimpleFIPS202.o

выдает следующую ошибку

/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: dans la fonction « _start »:
(.text+0x20): référence indéfinie vers « main »
libkeccak.a/SimpleFIPS202.o: dans la fonction « SHAKE128 »:
SimpleFIPS202.c:(.text+0x19): référence indéfinie vers « KeccakWidth1600_Sponge »
libkeccak.a/SimpleFIPS202.o: dans la fonction « SHAKE256 »:
SimpleFIPS202.c:(.text+0x49): référence indéfinie vers « KeccakWidth1600_Sponge »
libkeccak.a/SimpleFIPS202.o: dans la fonction « SHA3_224 »:
SimpleFIPS202.c:(.text+0x80): référence indéfinie vers « KeccakWidth1600_Sponge »
libkeccak.a/SimpleFIPS202.o: dans la fonction « SHA3_256 »:
SimpleFIPS202.c:(.text+0xb0): référence indéfinie vers « KeccakWidth1600_Sponge »
libkeccak.a/SimpleFIPS202.o: dans la fonction « SHA3_384 »:
SimpleFIPS202.c:(.text+0xe0): référence indéfinie vers « KeccakWidth1600_Sponge »
libkeccak.a/SimpleFIPS202.o:SimpleFIPS202.c:(.text+0x110): encore plus de références indéfinies suivent vers « KeccakWidth1600_Sponge »
lamportOTS.o: dans la fonction « sign(unsigned char*, unsigned char*, unsigned char***) »:
lamportOTS.cpp:(.text+0x140): référence indéfinie vers « SHAKE128(unsigned char*, unsigned long, unsigned char const*, unsigned long) »
collect2: error: ld returned 1 exit status

0

Решение

Наконец-то это сработало. Просто для протокола вот что я должен был сделать:

  • искать . файл вместо папки
  • оберните include следующим образом, потому что библиотека написана на C
    extern "C" {#include "libkeccak.a.headers/SimpleFIPS202.h"}
  • бежать
    g++ Lamport/lamportOTS.cpp -o Lamport/lamportOTS -L[folder containing libkeccak.a] -lkeccak (порядок, кажется, имеет значение)
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]