Мой вопрос: как указать / 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
Как решить мою проблему?