Как скомпилировать статическую библиотеку pthread-win32 для x64?

StackOverflow https://stackoverflow.com/questions/159298

Вопрос

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

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

Это было полезно?

Решение 2

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

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

Другие советы

Что касается меня, я просто использую 64-битный компилятор Windows (в данном конкретном случае кросс-компилятор mingw-w64), а затем делаю (with2.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)

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

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

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

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

Чтобы расширить ответ кгрифов, нужно сделать еще две вещи, чтобы фактически создать 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) Как написано в Makefile pthreads:

Target_cpu - это переменная среды, установленная командной строкой Visual Studio, которая предоставлена ​​платформой SDK (VS 2010 Express Plus SDK 7.1) - это переменная среды, которая может быть установлена ​​в среде разработки 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top