主要和插件中的pthread?

时间:2016-01-19 16:46:29

标签: c++ c plugins pthreads

我在Ubuntu 14.04上运行并使用gcc / g ++进行编译和链接。主要由大约30个文件和20个插件组成。我使用-pthread作为编译器选项,我做#include <pthread.h>。我的问题是:

  1. 仅将#include放入main是否足够,还是必须将其放入属于main的所有文件中?我猜对于插件也是如此。
  2. 我是否必须在所有插件中加入#include并使用-pthread进行编译,即使它们不使用线程或插件调用已经是线程?

2 个答案:

答案 0 :(得分:1)

问题有点模糊,30个文件的“主要”看起来像“exe”,即可执行程序和插件是共享的lib或dll。也好像你想让你的项目多线程。如果它已经是一个多线程程序然后使用gdb附加到它(如果你在linux上)和使用“信息线程”,它将列出线程或“cat / proc / [pid] / status | grep线程”,它将显示线程数..其中pid是运行程序的进程ID。

如果-pthread用作编译器选项但是如果它没有链接到pthread lib,那么你构建/ make程序中的某个地方应该是-lpthread;那么你的程序不是多线程的,即使你包含头文件,因为没有使用线程API。

答案 1 :(得分:1)

我会在这里说明,当你说“插件”时,你实际上是指“外部函数”,即在给定的C源文件中使用但未定义的函数。

当您从代码中调用任何外部函数时,至少需要声明该函数,以便编译器知道调用它的正确方法。头文件通常包含那些需要的声明。

例如,如果要使用strcpy函数,则需要#include <string.h>,因为该文件包含strcpy的声明。如果在给定的C文件中没有调用strcpystring.h中也没有声明任何其他函数),那么您不需要在该文件中#include <string.h>

pthread.h类似,如果您在该C源文件中调用pthread_create或该文件中声明的任何其他函数,则只需要包含它。

说到链接,如果链接在一起创建可执行文件的任何源文件使用任何pthread函数,那么在创建可执行文件时需要传递-pthread