Как вы компилируете статическую библиотеку pthread-win32 для x64? - PullRequest
2 голосов
/ 01 октября 2008

Похоже, была проделана некоторая работа, чтобы заставить pthread-win32 работать с x64, но инструкции по сборке отсутствуют. Я попытался создать симуляцию с помощью командной строки Visual Studio x64 Cross Tools, но когда я пытаюсь связать библиотеку с приложением x64, он не видит ни одного экспорта функции. Похоже, что он все еще компилирует lib как x86 или что-то еще.

Я даже пытался добавить / MACHINE в make-файл в соответствующих местах, но это не помогает. Кто-нибудь заставил это работать?

Ответы [ 5 ]

3 голосов
/ 06 мая 2013

Для меня я просто использую 64-битный компилятор Windows (кросс-компилятор mingw-w64 в данном конкретном случае), а затем делаю (с 2.9.1) как:

$ make clean GC-static 

Тогда как мне установить его для использования (в некоторых случаях это может не понадобиться, конечно),

cp libpthreadGC2.a $mingw_w64_x86_64_prefix/lib/libpthread.a
cp pthread.h sched.h semaphore.h $mingw_w64_x86_64_prefix/include

затем, чтобы использовать его, вы должны определить это (пример строки конфигурации ffmpeg для его использования):

--extra-cflags=-DPTW32_STATIC_LIB 

Во всяком случае, это один из способов.

Другой способ - сделать то же самое, затем изменить файлы * .h и удалить все ссылки на dllexport из заголовков (или вручную определить DPTW32_STATIC_LIB в заголовках).

например:

 sed 's/ __declspec (dllexport)//g;s/ __declspec (dllimport)//g'

(ссылка: сценарии сборки Zeranoe)

2 голосов
/ 29 июля 2015

Вот как я это сделал (VS2015). Должно работать и для старых Visual Studio.

1) Загрузите релиз .zip с SourceForge
2) Распакуйте в чистую папку - см. «Pthreads.2»
3) Откройте командную строку Visual Studio, перейдите к «pthreads.2». 4) Запустите "nmake", без аргументов. Он выдает справочное сообщение со списком всех допустимых команд, которые вы можете дать 'nmake' для его создания. Для получения дополнительной информации см. Файл "pthreads.2 \ FAQ", в котором объясняются их три различных варианта обработки 'cleanup'.

Я бы предложил строить только "VC" и "VC-debug" (и, возможно, статические из них). «Реальные» pthreads - это системная библиотека C на платформах POSIX, таких как Linux, поэтому только те комбинации могут дать вам то же поведение C-ошибок в Windows, что и в Linux, FreeBSD и т. Д.

2 голосов
/ 02 октября 2008

Пока он официально не выпущен, похоже, что вам нужно проверить заголовок CVS, чтобы получить версию 2.9 библиотеки. В версии 2.9 есть все исправления для x64, но у вас все равно будут проблемы, если вы попытаетесь скомпилировать статическую библиотеку из командной строки.

Единственный известный мне обходной путь - использовать библиотеки DLL вместо статической компоновки LIB.

0 голосов
/ 04 января 2018

чтобы развернуть kgriffs, нужно сделать еще две вещи для создания 64-битной DLL, а не 32-битной DLL.

Сначала загрузите последние pthreads через CVS (как предложено здесь )

1) использовать 64-битные инструменты сборки - достигается путем загрузки правильных настроек среды VC в командной строке (подробнее об этом здесь ):

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat amd64

(измените 11.0 на любую версию, которую вы используете)

2) Как написано в make-файле pthreads:

TARGET_CPU - это переменная среды, установленная в командной строке Visual Studio в соответствии с SDK (VS 2010 Express плюс SDK 7.1) PLATFORM - это переменная среды, которая может быть установлена ​​в кроссе VS 2013 Express x64 среда разработки

Это означает, что если это не было сделано vcvars (в моем случае это не так), вам нужно установить TARGET_CPU или PLATFORM (на всякий случай, если я установил их оба):

set TARGET_CPU=x64 set PLATFORM=x64

3) и теперь последний шаг:

nmake clean VC nmake clean VC-debug

это создаст 64-битные DLL-файлы (и соответствующую библиотеку импорта и PDB). Я могу убедиться, что он работает с Visual Studio 2012.

0 голосов
/ 02 октября 2008

Это сообщение может помочь.

...