g++ 与 libssl 的行为异常

g++ 与 libssl 的行为异常

我一直在尝试在 C++ 应用程序上使用 RSA C 库(因为缺少“官方” [阅读:OpenSSL] C++ 实现,所以这似乎是正确的方法)。问题是,每当我尝试编译测试代码时:

#include <iostream>
#include <openssl/rsa.h>
#include <openssl/engine.h>
#include <unistd.h>
using namespace std;

int main(int argc, char *argv[]) {
    RSA *myKeyPair = RSA_generate_key(2048, 65537, NULL, NULL);
    unsigned char *to;
    unsigned char *totwo;

    if (myKeyPair == NULL) {
        cout << "ERROR 1" << endl;
        return 0;
    }

    to = (unsigned char *) malloc(RSA_size(myKeyPair) - 11);

    if (RSA_private_encrypt(13, (const unsigned char *)"Hello World!", to, myKeyPair, RSA_PKCS1_PADDING) == -1) {
        cout << "ERROR 2" << endl;
        return 0;
    }

    cout << to << endl;

    totwo = (unsigned char *) malloc(RSA_size(myKeyPair) - 11);

    if (RSA_public_decrypt(13, to, totwo, myKeyPair, RSA_PKCS1_PADDING) == -1) {
        cout << "ERROR 3" << endl;
        return 0;
    }

    cout << totwo;

    free(to);
    free(totwo);
    RSA_free(myKeyPair);
    return 0;
}

我得到了所有 RSA_* 函数的未定义引用错误(请注意,我使用 -lssl 进行链接)。更奇怪的是,使用 GCC 编译完全相同的代码可以完成这项工作(当然,由于 C++ std lib 引用,它不会编译,但关键是我没有得到 RSA 函数的未定义引用)。

对于如何解决这个问题,有什么想法吗?(无需重复任何其他库?)。

答案1

你可能想看看如何混合使用 C 和 C++C++ FAQ 部分。

相关内容