即使指定了静态链接,也找不到 protobuf.dll

protobuf.dll not found even though static linking is specified

提问人:Teo Tyrov 提问时间:9/26/2023 更新时间:9/26/2023 访问量:34

问:

我有一个静态库,我想用 protobuf 静态链接。该库又由 ,它(希望)形成一个独立的可执行文件。我正在将 vcpkg 用于 protobuf 库。ppc2cpp_core.libppc2cpp.exe

当我尝试运行它时,我发现它丢失了。查看 cmake 构建日志,在我看来很明显,两者都使用静态链接,并且在 linux 上也使用相同的配置(ldd 没有显示对 libprotobuf.so 的依赖性)libprotobuf.dllppc2cpp_core.libppc2cpp.exe

ppc2cpp_core.lib:

[79/83] cmd.exe /C "cd . && "C:\Program Files\CMake\bin\cmake.exe" -E rm -f ppc2cpp_core.lib && C:\PROGRA~1\LLVM\bin\llvm-ar.exe qc ppc2cpp_core.lib  CMakeFiles/ppc2cpp_core.dir/src/analysis/PpcdisAnalysis.cpp.obj [...a bunch of other object files...] && C:\PROGRA~1\LLVM\bin\LLVM-R~1.EXE ppc2cpp_core.lib && cd ."

ppc2cpp.exe

[82/83] cmd.exe /C "cd . && C:\PROGRA~1\LLVM\bin\CLANG_~1.EXE -fuse-ld=lld-link -nostartfiles -nostdlib -O3 -DNDEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrt -Xlinker /subsystem:console CMakeFiles/ppc2cpp.dir/src/cli/ppc2cpp.cpp.obj -o ppc2cpp.exe -Xlinker /MANIFEST:EMBED -Xlinker /implib:ppc2cpp.lib -Xlinker /pdb:ppc2cpp.pdb -Xlinker /version:0.0   ppc2cpp_core.lib  _deps/ninutils-build/dolrel.lib  _deps/ppcdisasm-cpp-build/ppcdisasm.lib  _deps/fmt-build/fmt.lib  D:/a/ppc2cpp/ppc2cpp/protobuf_x64-windows/lib/libprotobuf.lib  _deps/yaml-cpp-build/yaml-cpp.lib  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -loldnames  && cd ."

完整工作流日志:https://github.com/em-eight/ppc2cpp/actions/runs/6309753804/job/17130317792

这是我的cmake文件:https://github.com/em-eight/ppc2cpp/blob/5f201d86297284a90d7c11af518589ff1e566637/CMakeLists.txt

查看构建日志,最可疑的是 和 。我在堆栈溢出上发现了这个建议打开的讨论,但它仍然对我不起作用-DPROTOBUF_USE_DLLS-D_DLLProtobuf_USE_STATIC_LIBS

cmake dll 协议缓冲区静态

评论

1赞 Tsyvarev 9/26/2023
Stack Overflow 要求将相关代码错误消息包含在问题帖子中,链接不足。另请参阅如何提问
0赞 Tsyvarev 9/26/2023
“查看 cmake 构建日志,在我看来很明显,ppc2cpp_core.lib 和 ppc2cpp.exe 都使用静态链接”——你为什么这么认为?文件名可以对应于静态库,也可以对应于导出库 (for )。libprotobuf.lib.dll
0赞 Teo Tyrov 9/27/2023
或?idk 我是 Windows 的菜鸟。如果是这样的话,我就搞砸了,因为我在发行版中没有看到任何其他 .lib 文件
0赞 Tsyvarev 9/27/2023
“我在发行版中没有看到任何其他 .lib 文件” - 如果您有 single 和 single ,那么它们都与共享库相关。在这样的发行版中没有静态库。.dll.lib
0赞 Teo Tyrov 9/27/2023
是的,看起来是这样。为此,我将不得不与 protobuf 人员交谈。

答: 暂无答案