Как установить pthread_win32 (Windows pthread / posix thread library) для Visual Studio 2005?

Чтобы быть ясным – я искал глубины Интернета и возвращал информацию о том, как это сделать

Я ищу помощь pthread_Win32 для работы с Visual Studio 2005. Я программирую на C, и у меня есть много многопоточных заданий для записи с использованием pthread.h. Однако, поскольку pthread является родным для unix, я должен написать весь свой код, ftp it, а затем ssh в мою удаленную систему unix для моего classа для ее запуска. Это заставляет развитие заняться гораздо дольше, и это невероятно неэффективно. Мне бы хотелось (больше всего на свете) получить эту работу на моей машине win32, чтобы я мог развиваться в визуальной студии, как я это делал довольно долгое время.

Я установил файл pthread.lib и файл pthread.h в соответствующие каталоги lib / header, где находятся все остальные файлы. DLL, с другой стороны (фактическая библиотека), я разместил в c: \ windows \ system32. Я попытался добавить DLL в зависимость (проект правой кнопки мыши -> ссылки -> Добавить новую ссылку), но, как утверждают другие, все, что я получаю, – это пустое диалоговое окно без возможности добавления каких-либо DLL-файлов или чего-либо еще. Кажется, что он распознает заголовочный файл, но я получаю эти ошибки при компиляции:

1> Образцы …

1> main.obj: ошибка LNK2019: неразрешенный внешний символ _ imp _pthread_join, на который ссылается функция _main

1> main.obj: ошибка LNK2019: неразрешенный внешний символ _ imp _pthread_create ссылается на функцию _main

1> main.obj: ошибка LNK2019: неразрешенный внешний символ _ imp _pthread_exit, указанный в функции _fcount

Из моего исследования я решил, что это проблема с DLL, и я предполагаю, что он не может найти определения функций, на которые я ссылался в своем коде. Я искал высоко и низко, и я не могу понять, каким образом можно преодолеть эту проблему. Я добавил каталоги файлов lib / header в мой компоновщик, просто в случае, но это не решило проблему. Мне нужно что-то сделать в визуальной студии, чтобы указать, что мне нужно pthreadVC2.dll как зависимость от проекта – и на данный момент это кажется невозможным (и крайне расстраивающим).

Любые слова мудрости?

большое спасибо

Я недавно воспользовался этой проблемой. Похоже, что префикс __imp__ добавляется к имени функции в случае, если pthread.h включен в режим динамической компоновки. Просто добавьте PTW32_STATIC_LIB в свой проект или исходный код, прежде чем включать pthread.h, чтобы решить проблему.

#define PTW32_STATIC_LIB #include  

Хотя я еще не полностью, поскольку Visual Studio теперь пытается связать с _ [FuncName] вместо [FuncName]

В визуальной студии функция, по-видимому, объявляется по-разному, вы собираетесь связывать их статически (.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 (или какой бы конкретный lib вам):

 Linker/Input/Additional Dependencies 

Недостаточно просто иметь файл lib в определенном каталоге, необходимо, чтобы компоновщик использовал его в качестве ввода.

Просто добавление pthreadVC2.lib в список компоновщиков не является достаточным. Вам также нужно добавить addtional lib, например pthreadVCE2.lib и pthreadVSE2.lib.

Я столкнулся с одной и той же проблемой, но затем решил ее добавить эти файлы.