g ++ se comportando estranhamente com libssl

0

Eu tenho tentado usar a biblioteca RSA C em um aplicativo C ++ (já que parece ser a maneira correta de fazê-lo, devido à falta de uma implementação C ++ [oficial: OpenSSL] "oficial"). A coisa é, sempre que eu tento compilar um código de teste:

#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;
}

Recebo erros de referência indefinidos para todas as funções RSA_ * (observe que estou vinculando a -lssl). Para torná-lo ainda mais estranho, compilar o mesmo código usando o GCC faz o trabalho (bem, é claro, ele não será compilado por causa das referências lib C ++, mas o ponto é que eu não tenho referência indefinida para funções RSA ).

Alguma idéia de como fazer isso? (sem recorrer a qualquer outro lib?).

    
por Misguided 20.09.2011 / 06:47

1 resposta

2

Você pode querer dar uma olhada no Como misturar C e C ++ seção do FAQ do C ++.

    
por con-f-use 20.09.2011 / 10:59