gpt4 book ai didi

bazel - 来自静态 cc_library 依赖项的符号如此缺失

转载 作者:行者123 更新时间:2023-12-01 09:21:05 31 4
gpt4 key购买 nike

如何告诉 bazel 链接预编译(静态)库?

我已经引用了一个现有的静态库项目 (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 不会自动为依赖。有没有办法让 bazel 自动执行此操作?我已经尝试了注释 *1 中的参数,但这没有帮助。

我对手动设置 -L 和 -l 标志感到非常不舒服,因为我将不得不支持不同的架构,而且我更愿意为依赖于架构的不同库设置路径,而不是在每个继承的工件中重复它。

最佳答案

使用 cc_binary 而不是 cc_library 和修改过的 linkopts (-shared) 和 name("lib myxylib .so"):

cc_binary(
name="libmyxy.so",
hdrs=["myxylib.h"],
srcs=["myxylib.c"],
visibility=["//visibility:public"],
deps=["@xy//:xy"],
linkopts = ["-shared"],
)

... 似乎是一种有用的解决方法,只要人们乐于在没有特定控制的情况下将所有内容链接到二进制文件中。这还包括一个 clib 版本绑定(bind)。

关于bazel - 来自静态 cc_library 依赖项的符号如此缺失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32845940/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com