Github开源生信云平台 DEMO
$ g++ -pthread -std=c++11 -O2 -Wall -o main main.cpp $ ./main Hello Concurrent World $ ldd main linux-vdso.so.1 (0x00007ffc02faf000) libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007ff31142a000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ff31140f000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff3113ec000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff3111f8000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff3110a9000) /lib64/ld-linux-x86-64.so.2 (0x00007ff31162d000)
C++11 的 std::thread 在 Linux 上底层依赖 POSIX Threads(pthreads)。
虽然 g++ 会自动链接 C++ 标准库(libstdc++),但 不会自动链接 libpthread。
因此,当你使用 std::thread、std::mutex 等多线程功能时,必须显式告诉链接器链接 pthread 库。
-O2:启用中高级别的代码优化
-Wall:启用“所有常见且有用的警告”
https://nj.gitbooks.io/c/content/
你贴的 Makefile 片段里,build_db 目标的编译命令已经包含了 -g(生成调试信息)和 -O0(关闭优化),这是调试的基础。下面我给你详细讲怎么 debug 这个 build_db 程序:
Makefile
build_db
-g
-O0
你当前的编译命令:
g++ -Wall -std=c++11 -g -O0 -fPIC -DLINEAR_PROBING -o build_db $^
-Wall
✅ 这已经是调试友好的编译方式。
make clean make build_db
gdb ./build_db
build_db.cpp
main
break main run
next
step
print var
backtrace
continue
list
quit
可以先开启 core dump:
ulimit -c unlimited ./build_db <args>
如果程序崩溃,会生成 core 文件,然后:
core
gdb ./build_db core
然后用 bt 查看调用栈。
bt