1

У меня есть небольшое приложение командной строки C++ Win32, построенное на VS2008, которое использует pthreads. Я хочу распространять приложение как автономный исполняемый файл, поэтому ссылка на pthreads статически: на странице Linker -> Input свойства проекта я добавил pthreadVC2.lib к дополнительным зависимостям. Проект строится, но исполняемому файлу по-прежнему требуется pthreadVC2.dll для запуска, несмотря на то, что я привязывался статически к файлу lib.pthread static linking

В Depends.exe действительно перечислены pthreadVC2.dll как зависимость.

Любая идея, почему это так? Благодаря

Том

ответ

4

Если вы хотите связать статически, необходимо сделать ссылку на статическую библиотеку. Файл pthreadVC2.lib является заглушкой для библиотеки DLL, а не статической.

Обратите внимание, что для использования статической библиотеки вы должны следовать правилам статического вложения. Например, вы должны позвонить pthread_win32_process_attach_np. Вам нужно будет сделать вызовы в библиотеке (при подключении процесса, подключении потоков, отсоединении потоков и отсоединении процесса), которые обычно выполняет для Windows DLL-схема.

Edit: Этот шаг может быть необходимо в соответствии с последней документации по этой ссылке:

В версии 2.9.0, статическая библиотека построена с использованием либо MSC или GCC включает в себя RT перехватывает , которые будут вызовите pthread_win32_process _ * _ np подпрограммы автоматически при запуске/выходе приложения .

+0

Я вижу. Спасибо за объяснение. –

+0

Почему, почему, почему они продолжают изменять API? Я просто попытался скомпилировать программу с новым mingw и 'pthread_win32_process_attach_np' теперь полностью отсутствует ... – vy32

+0

@ vy32: [README] (ftp://sourceware.org/pub/pthreads-win32/README) pthread говорит эта функция и ее друзья «не переносятся» (отсюда и «win32»). Вероятно, это причина, по которой они отсутствуют в mingw. Дополнительные пояснения приведены в [README.NONPORTABLE] (ftp://sourceware.org/pub/pthreads-win32/prebuilt-dll-2-9-1-release/README.NONPORTABLE) – Isaac