如何在Visual Studio Community Edition中将pthread库添加到C ++项目?

时间:2015-03-10 23:05:33

标签: c++ visual-studio libraries

我希望能够在visual studio中使用pthread,因为我正在使用它进行调试,并且在此处遵循教程。

http://web.cs.du.edu/~sturtevant/pthread.html

看起来很简单,将.h文件添加到C ++ include目录并将.lib文件添加到lib目录。

但是,当检测到.h文件时,我收到错误:

Error   1   error LNK2019: unresolved external symbol __imp__pthread_create 

我认为这意味着没有正确检测.lib文件。

我以为我可以将.lib文件添加到lib列表中 项目属性 - >链接器 - >额外的依赖关系 使用它的完整路径:

D:\Visual Studio\VC\lib\pthreadVC2.lib;kernel32.lib;user32.lib;

不确定将新的lib附加到列表的开头或列表的末尾是否有任何好处,但似乎都不起作用。

在命令行选项卡中,我们可以看到实际运行的命令(我认为):

/OUT:"C:\projects\GTKWavePipe\NamedPipeTest\Debug\NamedPipeTest.exe" /MANIFEST /NXCOMPAT /PDB:"C:\projects\GTKWavePipe\NamedPipeTest\Debug\NamedPipeTest.pdb" /DYNAMICBASE "D:\Visual Studio\VC\lib\pthreadVC2.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEBUG /MACHINE:X86 /INCREMENTAL /PGD:"C:\projects\GTKWavePipe\NamedPipeTest\Debug\NamedPipeTest.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Debug\NamedPipeTest.exe.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /TLBID:1 

有谁知道我可能做错了什么?最终我总是可以在我的cygwin环境中进行调试,但我在那里使用的调试器并不是那么好。

另外,我认为能够将库添加到visual studio中似乎是一种有用的技能。

2 个答案:

答案 0 :(得分:5)

您是否忘记将.dll文件添加到bin文件夹中?

如果你完全按照他的教程,你不需要在附加依赖项中添加任何.lib文件(注意他的教程中的步骤6-10)。我按照他的教程开始工作。我使用的是Visual Studio 12.0 Ultimate,但它应该与您的Visual Studio版本相同或非常相似。

我实际上是按照他的教程:http://web.cs.du.edu/~sturtevant/w13-sys/InstallingpthreadsforVisualStudio.pdf 他在那里为您提供了一个包含您需要的文件的压缩文件夹。我从那里得到了文件。

这是他的教程:

  

将3 .h文件(pthread.h,sched.h,sempahore.h)添加到\ VC下的include文件夹(我的是C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC)。   将pthreadVC2.lib添加到lib文件夹,将pthreadVC2.dll文件添加到bin文件夹。

     

接下来,打开属性管理器:在Visual Studio中,转到View> Other Windows> Property Manager。展开Debug文件夹。打开Microsoft.Cpp.Win32.user(或类似命名的属性表)。转到公共属性>链接器>输入。在Additional Dependencies中,将pthreadVC2.lib添加为依赖项。

答案 1 :(得分:0)

我猜你的问题与我的问题相似。

虽然您使用的是Windows 64位,但不要复制64位的dll和lib文件。 选择86而不是

我这样做了。