Bazel能否构建DLL?构建时expdtctlib.dll缺失求助
解决Bazel编译时DLL缺失的问题
我来帮你搞定这个困扰你几天的Bazel编译DLL问题!
问题根源
你在expdetect目标的data字段里直接写了:expdtctlib.dll,这是错误的引用方式。Bazel构建共享库(DLL)时,不会直接在当前包目录生成你指定的同名文件,而是将输出放在自身的构建缓存目录中,而且正确的依赖引用应该使用目标标签,而非硬编码的文件名。
修改后的BUILD文件
把你的BUILD文件调整成下面这样,重点修改expdetect的data字段:
cc_binary( name = "expdtctlib", srcs = ["expdtctlib.cpp"], deps = [ "//tensorflow/core:tensorflow", ], linkshared = 1, ) cc_binary( name = "expdetect", srcs = ["expdetect.cpp"], # 使用目标标签引用共享库,而非硬编码文件名 data = [":expdtctlib"], deps = [ "//tensorflow/core:tensorflow", ], )
额外注意事项
- 如果你在
expdetect.cpp中是通过硬编码路径加载DLL的,建议改为加载当前目录下的expdtctlib.dll——Bazel会自动将依赖的DLL复制到与expdetect二进制文件相同的输出目录中,这样运行时就能正确找到它。 - 重新执行
bazel build :expdetect,Bazel会自动处理共享库的构建和依赖复制,不会再出现DLL缺失的报错。
内容的提问来源于stack exchange,提问作者cgc
相关产品推荐
相关产品推荐

