Каков «правильный» способ создания Winelib DLL для 32- и 64-битных версий?Linux

Ответить
Anonymous
 Каков «правильный» способ создания Winelib DLL для 32- и 64-битных версий?

Сообщение Anonymous »

В настоящее время я работаю над проектом, который потребовал от меня повторной реализации библиотеки Windows DLL как Wine DLL (общий объект Linux). Я хочу, чтобы эта DLL была доступна как для 32-битных, так и для 64-битных процессов Wine, и я создаю ее на 64-битной машине OpenSUSE Tumbleweed.
Пока у меня есть только смог скомпилировать свою реализацию как 32-битную библиотеку Winelib, используя

Код: Выделить всё

winegcc -m32 -L/usr/lib/wine/i386-unix -shared -o myproject.dll myproject_main.c myproject.spec
Указание -L/usr/lib/wine/i386-unix было необходимо, потому что даже Winegcc не уловил путь к библиотеке Wine. Myproject.dll.so работает: 32-битные процессы Wine могут без проблем загружать библиотеку и использовать ее.
Затем я попытался скомпилировать ее как 64-разрядную версию. битовый объект, используя

Код: Выделить всё

winegcc -L/usr/lib64/wine/x86_64-unix -shared -o myproject64.dll myproject_main.c myproject.spec
но безрезультатно. Не удалось установить связь с сообщением

Код: Выделить всё

/usr/lib64/gcc/x86_64-suse-linux/14/../../../../x86_64-suse-linux/bin/ld: cannot find -ladvapi32: No such file or directory
/usr/lib64/gcc/x86_64-suse-linux/14/../../../../x86_64-suse-linux/bin/ld: cannot find -luser32: No such file or directory
/usr/lib64/gcc/x86_64-suse-linux/14/../../../../x86_64-suse-linux/bin/ld: cannot find -lwinecrt0: No such file or directory
/usr/lib64/gcc/x86_64-suse-linux/14/../../../../x86_64-suse-linux/bin/ld: cannot find -lkernel32: No such file or directory
/usr/lib64/gcc/x86_64-suse-linux/14/../../../../x86_64-suse-linux/bin/ld: cannot find -lntdll: No such file or directory
collect2: error: ld returned 1 exit status
winegcc: /usr/bin/gcc failed
После проверки различий между /usr/lib/wine/i386-unix и /usr/lib64/wine/x86_64-unix я обнаружил, что последний вообще не содержит необходимых архивных файлов (например, libkernel32.a), а первый — есть. У меня также есть папка /usr/lib64/wine/x86_64-windows, содержащая эти архивные файлы, но они представляют собой двоичные файлы PE и поэтому не могут использоваться для связывания.
Действительно, пакеты OpenSUSE не заполняют архивные файлы в x86_64-unix, а только в x86_64-windows при сборке. Я проверил, и пакеты Fedora (по крайней мере, официальные из WineHQ), похоже, имеют противоположную проблему: мне не удалось найти файлы архива i386-unix, но пакеты содержат x86_64-unix< /code>.
Я уже спрашивал об этом на форумах OpenSUSE, где меня просили пойти и спросить на форумах Wine, поскольку «похоже, это не проблема с упаковкой». ." Мой пост на форумах WineHQ до сих пор не получил ответа, поэтому мне интересно, неправильный ли мой подход: я чувствую, что смогу скомпилировать свою реализацию и как 64-битный двоичный файл. Если это так и должно работать, как мне скомпилировать 64-битный двоичный файл?

Подробнее здесь: https://stackoverflow.com/questions/790 ... and-64-bit
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»