我正在检查一个同事消息队列库,发现它不起作用,但它确实为他做了。经过几天的搔痒,我终于意识到我没有在命令行上做“-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符号而言。
答案 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