Для проекта bazel c ++, как использовать "dlopen / sym", чтобы найти мою собственную библиотеку вывода? - PullRequest
0 голосов
/ 13 февраля 2019

Мой вопрос: как указать / config, чтобы моя функция "dlopen" могла найти файл библиотеки ".so", созданный моим собственным проектом bazel?

У меня очень простой проекткак это:

ls
BUILD  WORKSPACE  hello-dl.cc  hello-greet.cc  hello-greet.h

cat hello-greet.cc
#include<stdio.h>
void f(){
    printf("f function\n");
}

cat hello-dl.cc
#include<stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
int main(){
    void * handle = dlopen("hello-greet", RTLD_LAZY);
    if (!handle) {
        fprintf(stderr, "%s\n", dlerror());
        exit(EXIT_FAILURE);
    }
    void (*f)() = (void (*)()) dlsym(handle, "f");
    char* error = dlerror();
    if (error != NULL) {
        fprintf(stderr, "%s\n", error);
        exit(EXIT_FAILURE);
    }

    f();
    dlclose(handle);
    exit(EXIT_SUCCESS);
    return 0;
}

и содержимое файла «BUILD»:

cc_binary(
    name = "hello-dl",
    srcs = ["hello-dl.cc"],
    linkopts = ['-ldl', '-lm']
)
cc_library(
    name = "hello-greet",
    srcs = ["hello-greet.cc"],
    hdrs = ["hello-greet.h"],
)

Я собрал библиотеку и двоичный файл:

bazel build //:hello-greet
bazel build //:hello-world

При запускеон говорит, что не может найти библиотечный файл:

bazel run hello-dl
....
hello-greet: cannot open shared object file: No such file or directory

Как решить мою проблему?

...