2011-04-13 82 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

相關問題