如何为Visual Studio 2005安装pthread_win32(Windows pthread / posix线程库)?

只是要清楚 – 我已经search了互联网的深度,并回来了解如何做到这一点

我正在寻求帮助,设置pthread_Win32来与Visual Studio 2005一起工作。我使用C语言进行编程,并且使用pthread.h编写了大量的multithreading任务。 但是,由于pthread是unix的本地代码,所以我必须编写所有的代码,然后用ssh来远程unix系统来运行它。 这使得开发需要更长的时间,而且效率非常低。 我非常喜欢(比什么都重要)能够在我的win32机器上工作,所以我可以在Visual Studio中开发,就像我已经做了相当长的一段时间。

我已经将pthread.lib文件和pthread.h文件安装到其他所有文件所在的lib /头目录中。 另一方面(实际的库)的DLL,我已经放在c:\ windows \ system32中。 我试图添加DLL作为依赖项(右键单击项目 – >引用 – >添加新的引用),但正如其他人所说,我得到的是一个空白的对话框,没有select添加任何DLL文件或任何东西。 它似乎认识到头文件,但我编译时得到这些错误:

1>链接…

1> main.obj:错误LNK2019:无法parsing的外部符号_ imp _pthread_join在函数_main中引用

1> main.obj:错误LNK2019:无法parsing的外部符号_ imp _pthread_create在函数_main中引用

1> main.obj:错误LNK2019:无法parsing的外部符号_ imp _pthread_exit在函数_fcount中引用

从我的研究中,我确定这是DLL的问题,我假设它找不到我在代码中引用的函数的定义。 我search了高和低,我似乎无法找出任何方法来克服这个问题。 我已经添加了lib /头文件的目录到我的链接器,只是在案例中,但没有解决问题。 我需要在visual studio中做一些工作来指定我需要将pthreadVC2.dll作为项目依赖关系,而在这一点上这似乎是不可能的(也是非常令人沮丧的)。

任何智慧的话语?

非常感谢你

我最近经历了这个问题。 在动态链接模式中包含pthread.h的情况下,似乎前缀__imp__是前缀函数名称。 在包含pthread.h之前,只需将PTW32_STATIC_LIB定义添加到您的项目或源代码中即可解决问题。

#define PTW32_STATIC_LIB #include <pthread.h> 

虽然我没有完全结束,因为Visual Studio现在试图链接到_ [FuncName]而不是[FuncName]

在Visual Studio中,函数似乎声明不同,你要静态链接(.lib)或动态(.dll)。

要定义一个函数,您将动态链接:

 __declspec (dllimport) int myFunc(int myArgs) ; 

要定义要导出的动态链接函数:

 __declspec (dllexport) int myFunc(int myArgs) ; 

最简单的,定义一个你将会静态链接的函数:

 int myFunc(int myArgs) ; 

[编辑]

我正在进行调查,并在MS帮助中心上完成了这个任务 。 似乎为了避免_ [FuncName]效应,需要通过以下方式定义静态链接库函数:

 int __cdecl myFunc(int MyArgs) ; 

您是否已经将pthreadVC.lib (或者您需要的任何特定库)添加到项目属性中:

 Linker/Input/Additional Dependencies 

仅仅将lib文件放在特定的目录中是不够的,链接器需要被告知使用它作为输入。

只要将pthreadVC2.lib添加到链接器列表是不够的。 您还必须添加像pthreadVCE2.lib和pthreadVSE2.lib的附加库。

我面临同样的问题,但后来我通过添加这些文件来解决它。