我如何告诉bazel链接预编译(静态)库?符号静态cc_library依赖关系如此缺失
我已引用现有的静态库项目(xy.BUILD):
cc_library(
name="xy",
srcs=["lib/x86_64/libxy.a"],
hdrs=["include/xy.h"],
includes=["include"],
#linkstatic=True, <---- *1
#alwayslink=True,
visibility=["//visibility:public"],
)
内的另一个项目(BUILD):
cc_library(
name="myxylib",
hdrs=["myxylib.h"],
srcs=["myxylib.c"],
visibility=["//visibility:public"],
deps=["@xy//:xy"],
linkopts = ["-pthread",
#"-Lexternal/xy/lib/x86_64/", <---- *2
#"-lxy",
#"-z defs"
],
)
...作为外部依赖项(WORKSPACE中的new_local_repository)。我可以使用头文件并将代码编译为.so库,但共享对象内部缺少来自静态库的符号,因为bazel不会自动设置-L和-l标志(请参见注释* 2)依赖。有没有什么办法可以自动做到这一点?我已经尝试了评论* 1的参数,但是这没有帮助。
手动设置-L和-l标志让我感到非常不舒服,因为我将不得不支持不同的体系结构,我更愿意为依赖于不同体系结构的体系结构设置路径,而不是在每个继承的工件中重复它。
您是否收到错误链接或您是否尝试发布自包含的库? – kristina
我在构建过程中没有收到任何错误,但是我希望静态库(xy)中的符号包含在myxylib中。这适用于如果我将“-Lexternal/xy/x86_64 -lxy”添加到linkopts,但由于路径是依赖于平台的,我宁愿拥有一些bazel标志或类似的东西,使bazel根据它所依赖的依赖信息自动追加它。 libxy.a文件的位置已经在cc_library(xy)的srcs参数中给出,所以我不应该在cc_library(myxylib) – Jan