Библиотека Rust с экспортированными символами C и статически связанной libstd - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть небольшая часть оболочки C, которая находится между Postgres API и моим кодом Rust.Мне нужно экспортировать эти функции C, чтобы Postgres мог вызывать их.

Я пробовал оба пакета dylib и cdylib.dylib экспортирует ожидаемые символы:

$ nm target/release/libfdwtrait.so | grep add_one
0000000000005ef0 T add_one
0000000000005ee0 T pg_finfo_add_one

, но для этого требуется общий объект libstd:

$ ldd target/release/libfdwtrait.so
    linux-vdso.so.1 (0x000000740050d000)
    libstd-6c11f2ad6c829596.so => not found
    libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x000000740049a000)
    libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007400350000)
    /lib/ld-linux-aarch64.so.1 (0x00000074004e2000)

cdylib не экспортирует нужные мне функции C:

$ nm target/release/libfdwtrait.so | grep add_one
zsh: done       nm ../target/release/libfdwtrait.so | 
zsh: exit 1     grep --color=auto add_one

, но также не требует общего объекта

$ ldd ../target/release/libfdwtrait.so
    linux-vdso.so.1 (0x000000796a39b000)
    libdl.so.2 => /lib/aarch64-linux-gnu/libdl.so.2 (0x000000796a31c000)
    libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x000000796a2f0000)
    libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x000000796a2ce000)
    libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x000000796a184000)
    /lib/ld-linux-aarch64.so.1 (0x000000796a370000)

src / fdw.c :

PG_FUNCTION_INFO_V1(add_one);

Datum
add_one(PG_FUNCTION_ARGS)
{
  int32   arg = PG_GETARG_INT32(0);
  int32   result = call_from_c(arg);

  PG_RETURN_INT32(result);
}

src/lib.rs:

#[no_mangle]
pub extern "C" fn call_from_c(i: libc::int32_t) -> libc::int32_t {
    i * 2
}

Мне нужны некоторые атрибуты как cdylib, так и dylib.К сожалению, они кажутся довольно жестко закодированными в кодовой базе Cargo.

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