【发布时间】:2012-06-22 02:26:32
【问题描述】:
我是 posix 线程库的新手,我尝试使用以下教程编译示例代码:
g++ -lpthread agreement.cpp -o agreement
但是我无法编译代码并收到以下错误消息:
a3q2.cpp:(.text+0x7e): undefined reference to `sem_open'
a3q2.cpp:(.text+0xab): undefined reference to `sem_wait'
a3q2.cpp:(.text+0x290): undefined reference to `sem_post'
a3q2.cpp:(.text+0x2af): undefined reference to `sem_close'
a3q2.cpp:(.text+0x2bb): undefined reference to `sem_unlink'
collect2: ld returned 1 exit status
make: *** [a3q2_exe] Error 1
我知道编译需要 -lpthread 才能工作,但是我可能需要其他选项来解决问题吗?如果不是,我该如何安装“正确”的 pthread 库?
感谢您的帮助!
【问题讨论】:
-
你想要
-pthread,而不是-lpthread。使用 pthreads 支持进行编译可能需要的不仅仅是一个库。您的平台可能需要-lrt信号量(您查看手册页了吗?)。 -
未定义的引用是链接器,而不是编译器错误。
-
此外,提供符号的对象(和档案)必须在链接时使用这些符号在对象之后排序。在这里可能无关紧要,但要养成将
-lfoo放在命令的end 而非start 的习惯。
标签: c++ linux multithreading system-calls undefined-reference