Search code examples
c++buildfindsharedbazel

Where does bazel project store its ".so" files?


I've got a very simple bazel project which builds out a library and a binary like below:

cc_binary(
    name = "hello-world",
    srcs = ["hello-world.cc"],
    deps = [":hello-greet"],
)
cc_library(
    name = "hello-greet",
    srcs = ["hello-greet.cc"],
    hdrs = ["hello-greet.h"],
)

Yes it works in my ubuntu box:

# cat hello-greet.cc
#include<stdio.h>
void f(){
    printf("f function\n");
}
# cat hello-world.cc
#include<stdio.h>
#include"hello-greet.h"
int main(){
    f();
    printf("%s \n", "abc");
    return 0;
}

"bazel build hello-world && bazel run hello-world" will print:

f function
abc

Ok, fine. But I cannot find where is my libhello-greet.so is, where is it stored? I cannot find it under my current directory.

Thanks a lot.


Solution

  • Bazel treats the source tree as read-only and puts its outputs in a separate output directory. The official way to find the this directory is to run bazel info output_base. However, as a convenience, Bazel also makes a symlink to this directory called bazel-out in the workspace root.

    In your specific case, there may or may not be a shared library for hello-greet actually created—it's perfectly possible to build a binary without creating the intermediate shared objects. bazel build //:hello-greet should build and display the path to a shared object for hello-greet.