pthread статическое связывание - PullRequest
1 голос
/ 07 марта 2012

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

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

Есть идеи, почему это так?Спасибо

Том

1 Ответ

4 голосов
/ 07 марта 2012

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

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

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

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

...