我在aarch64上使用Crypto ++,在编译使用cryptopp-7.0.0的二进制文件时遇到了一个问题,我遇到的唯一链接问题与RSAFunction有关,所有其他类均工作正常,这是程序本身确实是解决问题的基本方法:

#include "cryptopp/rsa.h"
using CryptoPP::RSA;

#include <string.h>
using std::string;

#include <unistd.h>

int main(void)
{
    RSA::PublicKey publicKey;
    return 0;
}

尝试使用此命令进行编译时:

~$ toolchain/bin/aarch64-libreelec-linux-gnueabi-g++ cryptopptestfile.cpp -o crypttest -L/toolchain/usr/lib -lcryptopp

我得到那些错误:

<artificial>:(.text+0xe7c): undefined reference to `vtable for CryptoPP::RSAFunction'
<artificial>:(.text+0xe80): undefined reference to `vtable for CryptoPP::RSAFunction'
<artificial>:(.text+0xea8): undefined reference to `VTT for CryptoPP::RSAFunction'
<artificial>:(.text+0xeb4): undefined reference to `VTT for CryptoPP::RSAFunction'
/tmp/ccs498WJ.ltrans0.ltrans.o: In function `CryptoPP::InvertibleRSAFunction::~InvertibleRSAFunction()':
<artificial>:(.text+0x10c0): undefined reference to `vtable for CryptoPP::InvertibleRSAFunction'
<artificial>:(.text+0x10c4): undefined reference to `VTT for CryptoPP::InvertibleRSAFunction'
<artificial>:(.text+0x10c8): undefined reference to `vtable for CryptoPP::InvertibleRSAFunction'
<artificial>:(.text+0x112c): undefined reference to `VTT for CryptoPP::InvertibleRSAFunction'
/tmp/ccs498WJ.ltrans0.ltrans.o: In function `CryptoPP::InvertibleRSAFunction::InvertibleRSAFunction()':
<artificial>:(.text+0x12e4): undefined reference to `VTT for CryptoPP::InvertibleRSAFunction'
<artificial>:(.text+0x12f8): undefined reference to `VTT for CryptoPP::InvertibleRSAFunction'
<artificial>:(.text+0x1324): undefined reference to `vtable for CryptoPP::InvertibleRSAFunction'
<artificial>:(.text+0x132c): undefined reference to `vtable for CryptoPP::InvertibleRSAFunction'
<artificial>:(.text+0x13cc): undefined reference to `VTT for CryptoPP::InvertibleRSAFunction'
<artificial>:(.text+0x13dc): undefined reference to `VTT for CryptoPP::InvertibleRSAFunction'

这仅与:
cryptopp::RSAFunction(s)

感谢帮助。

这是编译标志:
arch64-libreelec-linux-gnueabi-g++ -march=armv8-a+crc+fp+simd -mabi=lp64 -Wno-psabi -mcpu=cortex-a53+crc+fp+simd -fomit-frame-pointer -Wall -pipe -Os -flto -ffat-lto-objects -fPIC -pipe -c rsa.cpp

g++版本:
6.2.0

最佳答案

确定的问题,是由于此编译标志:

-flto

删除此编译标志后,一切正常,请注意激活此标志是:
-flto:
This option runs the standard link-time optimizer. When invoked with
source code, it generates GIMPLE (one of GCC’s internal representations)
and writes it to special ELF sections in the object file. When the object
files are linked together, all the function bodies are read from these ELF
sections and instantiated as if they had been part of the same translation
unit.

使用从6.0.0到8.0.0版本测试的RSAFunction时,此标志断开链接器

09-05 00:37