![](/img/trans.png)
[英]How to configure and build Tesseract OCR C++ using Visual Studio 2015 x64 on Windows 10
[英]How to build and debug a c++ executable using Bazel on windows 10 x64
我想使用帶bazel的生成的可執行文件調試c ++代碼,但是由於某種原因,bazel不在x64體系結構上構建代碼,或者該可執行文件在調試模式下不起作用。
我的檔案是
#include <iostream>
int main()
{
int a = 3;
int b = 5;
int c = a + b;
/* code */
std::cout << "Hello world" << std::endl;
return 0;
}
我使用此命令來構建我的應用
bazel build // src / app:main --strip =從不--compilation_mode = dbg
但是當我在設置斷點后嘗試調試應用程序時,我在控制台中收到此錯誤
例如,如果我跑步
gdb main.exe
然后
(gdb)打破主要
我懂了
沒有加載符號表。
當我使用bazel build命令構建代碼時,質疑如何在main.exe中加載符號?
Windows上的Bazel默認情況下使用MSVC構建C ++代碼。 我認為GCC使用的調試數據格式不同於MSVC的.pdb文件,這可以解釋為什么您不能使用gdb
調試Bazel構建的二進制文件。
要使用MingW GCC而不是默認的MSVC進行構建,必須告訴Bazel使用該編譯器:
bazel build -c dbg --compiler=mingw-gcc //src/app:main
這是有關--compiler
標志值[1]的更多信息。
這首先對我來說失敗了,所以我遵循https://stackoverflow.com/a/30071634/7778502的說明並安裝了mingw-w64-x86_64-gcc
。
現在,我可以使用Bazel構建//src/app:main
,並使用gdb
設置斷點:
$ gdb /c/src/so53840959/CPP_TESTS/project/bazel-bin/main/app.exe
GNU gdb (GDB) 7.11.1
...
Traceback (most recent call last):
File "<string>", line 3, in <module>
ImportError: No module named libstdcxx.v6.printers
/etc/gdbinit:6: Error in sourced command file:
Error while executing Python code.
Reading symbols from /c/src/so53840959/CPP_TESTS/project/bazel-bin/main/app.exe...done.
(gdb) break main
Breakpoint 1 at 0x401568
(gdb)
我對gdb
不熟悉,但是Error看起來是良性的,並且一切正常。
[1]為了找到這個--compiler
標志值,我查看了已注冊的C ++工具鏈。 我不知道執行此操作的用戶友好方式(並且我不想在此處詳細介紹工具鏈),但是我們需要知道的是:
運行bazel query @local_config_cc//:toolchain --output=build
。
這將打印C ++工具鏈規則的定義,這是一個自動生成的構建規則,告訴Bazel它可以使用哪些C ++工具鏈。
看一下以toolchains = {...
開頭的行。
它是一個字典,其中每個鍵都定義--cpu
標志值,或--cpu
和--compiler
標志值對。 在這里無需詳細介紹語法,您可能會看到帶有鍵x64_windows|mingw-gcc
的條目,這意味着可以使用--cpu=x64_windows
和--compiler=mingw-gcc
進行構建。 (由於--cpu=x64_windows
是Windows上的默認設置,因此可以將其省略。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.