Ядро Dotnet работает как 32-разрядное 86-кратное в Linux

#linux #.net-core #32-bit #dotnetcorecli

#linux #.net-ядро #32-разрядный #dotnetcorecli

Вопрос:

Я пытаюсь управлять считывателем RFID в Linux с помощью Dotnet core 3

ReaderDynamicLib.dll это основной файл контроллера, который не является моим созданным DLL-файлом. Это предоставленный производителем файл sdk, который работает только на 32 бит, я попробовал его в Windows.

Я создал консольное приложение для отправки параметра в ReaderDynamicLib.dll

    [DllImport("ReaderDynamicLib.dll")]
public static extern int SetAntenna(int hScanner, int m_antenna_sel, int Address);
  

как это работает нормально в Windows, но в Linux

   An attempt was made to load program with an incorrect format
  

Я предполагаю, что в Linux нет опции run as 32bit

Ответ №1:

Вероятно, сейчас это не имеет значения, но для дальнейшего использования проблема здесь в том, что библиотека dll поставщика, вероятно, была скомпилирована для работы на платформе Windows (поскольку вы можете запускать ее в Windows). Затем вы не DllImport сможете использовать ту же самую библиотеку в программе .NET, работающей в Linux. Двоичный файл, скомпилированный для работы на платформе Windows, не будет загружаться на платформе Linux. Его нужно будет перекомпилировать для Linux.

Ответ №2:

Я ничего не знаю о вашем проекте, но публикация для linux 32 bit должна работать с

 dotnet publish --runtime linux-x86 sampleProject.csproj
  

Комментарии:

1. Нет среды выполнения linux-x86

2. github.com/dotnet/runtime/blob/…