Чтобы быть ясным – я искал глубины Интернета и возвращал информацию о том, как это сделать
Я ищу помощь 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.
Я столкнулся с одной и той же проблемой, но затем решил ее добавить эти файлы.