Неразрешенный внешний символ AES_set_encrypt_key при связывании кода Rust с boringssl в Windows - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь скомпилировать свою библиотечную оболочку boringssl.Я скомпилировал файл crypto.lib, который определенно содержит символ AES_set_encrypt_key, судя по команде:

nm crypto.lib --demangle

Затем я сгенерировал файл FFI, который объявляет этот символ:

use std::os::raw::{c_char, c_int, c_uchar, c_uint, c_void};

#[repr(C)]
pub struct aes_key_st {
    pub rd_key: [u32; 60usize],
    pub rounds: c_uint,
}

pub type AES_KEY = aes_key_st;

extern "C" {
    pub fn AES_set_encrypt_key(key: *const u8, bits: c_uint, aeskey: *mut AES_KEY) -> c_int;
    pub fn foo() -> c_int;
}

Вот исходные объявления C:

struct aes_key_st {
  uint32_t rd_key[4 * (AES_MAXNR + 1)];
  unsigned rounds;
};

typedef struct aes_key_st AES_KEY;

OPENSSL_EXPORT int AES_set_encrypt_key(const uint8_t *key, unsigned bits, AES_KEY *aeskey);

build.rs:

fn main() {
    let out_dir = "<path_to_lib>"
    println!("cargo:rustc-link-search=native={}", out_dir);
    println!("cargo:rustc-link-lib=static=crypto");
}

Я получаю ошибку LNK2019 (unresolved external symbol) при компиляции этого кода.

Почему это происходит?

1 Ответ

0 голосов
/ 28 сентября 2018

Я скомпилировал свою библиотеку с 32-битной версией MSVC, но Rust компилирует программы с 64-битной.Вот почему произошел конфликт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...