2011-04-13 45 views
0

只是要清楚 - 我已经在网上搜索的深度和背的信息,如何做到这一点如何为Visual Studio 2005安装pthread_win32(Windows pthread/posix线程库)?

我在寻找帮助建立pthread_Win32与Visual Studio 2005的工作,我的编程在C中,我有一些使用pthread.h编写的多线程任务。但是,由于pthread是unix的本地特性,因此我必须编写所有代码,然后将其写入到我的班级远程unix系统中以运行它。它使得开发需要更长的时间,而且效率非常低。我非常喜欢(比什么都重要)能够在我的win32机器上工作,所以我可以在Visual Studio中开发,就像我已经做了相当长的一段时间。

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

1>链接...

1> main.obj:错误LNK2019:解析外部符号_ 小鬼 _pthread_join中引用函数_main

1> main.obj:错误LNK2019:解析外部符号_ imp的 _pthread_create在函数引用_main

1> main.obj:错误LNK2019:解析外部符号_ 小鬼 _pthread_exit在函数引用_fcount

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

任何智慧的话?

非常感谢您

+0

通常__imp_thread_join东西意味着它认为它是C++,但公司的C ...也许尝试在包含内添加一个外部C {}块。 – rogerdpack 2012-09-24 20:20:57

回答

1

你有没有加入pthreadVC.lib(或任何特定的lib需要)到项目属性:

Linker/Input/Additional Dependencies 

这是不够的,只是在一个特定的目录下的lib文件,链接器需要被告知使用它作为输入。

+1

是的,lib和头文件已放置在VC已经在启动时查找这些文件的目录中。当我编码时,环境识别pthread函数和变量类型。但是,我没有得到错误,直到我链接。我相信这些函数是在pthreadVC2.dll中定义的。 .lib和.h文件位于合适的位置 – 2011-04-14 05:26:48

+0

@Sam:lib文件可能位于正确的位置,但项目仍需要被告知包含该特定的lib文件。假设您正在使用IDE项目进行构建,请进入项目属性表并将'pthread.lib'放入我在答案中描述的属性中。请注意,'pthread.lib'可能是你想要的,但根据你的项目的具体情况,你可能需要一个名称略有不同的库(取决于你是否使用C++等)。 – 2011-04-14 16:17:58

+0

@MichaelBurr。谢谢。你的答案很有用。 +1 – Farah 2014-04-24 18:19:27

0

只需将pthreadVC2.lib添加到链接器列表是不够的。 你还必须添加像pthreadVCE2.lib和pthreadVSE2.lib这样的addtional库。

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

3

我最近经历过这个问题。 在动态链接模式中包含pthread.h时,看起来__imp__前缀被添加到函数名称的前面。 只需将PTW32_STATIC_LIB定义到您的项目或您的源代码之前,包括pthread.h应该解决问题。

#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) ; 

而且simpliest,来定义你将静态链接的功能:

int myFunc(int myArgs) ; 

[编辑]

我正在进行调查,并通过MS帮助中心的this。 看来,以避免被 _ [FUNCNAME]效果就需要定义一个静态链接库函数如下:

int __cdecl myFunc(int MyArgs) ; 
+0

很好的答案!可能救了我几个小时。你在哪里发现记录了PTW32_STATIC_LIB定义? – rsp1984 2017-06-30 12:44:34

+0

谢谢,只是注意到你的评论。说实话,我不记得我在哪里找到它,可能当时正在挖掘python和系统标题。 – 2017-08-19 19:27:23

相关问题