能够链接没有pthreads和程序仍然运行?

时间:2015-06-22 17:48:55

标签: c++ linux g++ pthreads

我正在检查一个同事消息队列库,发现它不起作用,但它确实为他做了。经过几天的搔痒,我终于意识到我没有在命令行上做“-lpthread”。当我这样做的时候,突然间,一切都与世界相对应。这是怎么发生的?我知道pthread,就我而言,是一个动态链接的库。如果我在没有-lpthread的情况下编译我的示例代码(我认为这不是相关的代码),就像链接器或操作系统只是填充空白,如果你愿意的话,使用什么都不做的存根例程。如果我提供-lpthread标志并在gdb中运行该程序,则显示以下行:

Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".

重新编译没有标志的程序并使用gdb提到没有包含phtreads,这是有道理的。如果重要的话,我在这里使用Raspberry Pi。

g ++ --version报告:

g++ (Debian 4.6.3-14+rpi1) 4.6.3

显然,如果可以的话,这是我想解决的问题。

使用“nm”将符号表转储到两个可执行文件上显示没有差异,至少对于pthread符号而言。

1 个答案:

答案 0 :(得分:-1)

使用我原来的Raspberry Pi基准测试,可以使用以下代码编译线程程序:

 gcc  mpmflops.c cpuidc.c -lrt -lc -lm -O3 -o MP-MFLOPS2
 with gcc (Debian 4.6.3-14+rpi1) 4.6.3

这不会在RPi 2上编译并且需要

 gcc  mpmflops.c cpuidc.c -lpthread -lrt -lc -lm -O3 -o MP-MFLOPS2
 again with gcc (Debian 4.6.3-14+rpi1) 4.6.3 and 
 or gcc (Raspbian 4.8.2-21~rpi3rpi1) 4.8.2

参考:

http://www.roylongbottom.org.uk/Raspberry%20Pi%20Multithreading%20Benchmarks.htm