В настоящее время я работаю над созданием собственной неуправляемой библиотеки C++ для проекта Unity. DLL использует сокеты, и мне нужно, чтобы она была кроссплатформенной с системами на основе Unix.
Ясно, что мне нужно использовать WinSock на платформе Windows и сокеты POSIX на чем-то вроде Linux.
Сборка Windows отлично работает с Unity без проблем. Я также могу использовать строить для Linux, но я получаю ошибки времени выполнения, когда действительно пытаюсь использовать приложение Linux. Я считать, что это потому, что DLL связана во время выполнения, и проверки препроцессора, которые у меня есть для разных платформ в моем коде C++, на самом деле не перекомпилируются.
Я знаю, что библиотеки DLL являются проприетарными для Windows, поэтому должно быть что-то происходящее, в первую очередь, где Unity сможет построить с помощью DLL для Linux, верно? Или это просто не дает мне ошибок компоновщика, потому что я компилирую в среде Windows, и он ничего не знает?
Я думаю, что мне нужно будет создать более одной DLL для разных целевых платформ. Затем проверьте, какой из них использовать в C#, с помощью некоторых предварительных проверок. Моя проблема в том, что это сделает мой код немного беспорядочным, и я надеялся абстрагироваться от проверки платформы на C++, чтобы другим было легче использовать эту DLL.
Если у кого-то есть представление о направлении движения вперед, мы будем очень признательны!
Кроме того, используете ли вы одну и ту же версию Unity в Windows и Linux? Они периодически меняют интерфейс плагина. Неясно, действительно ли это ошибка загрузки, инициализации или ошибка возникает в вашем коде.





Так что за сообщение об ошибке? Все ссылки создаются во время выполнения, Windows и Linux, но в Windows вы получаете полностью связанные файлы, в Linux вы можете не проверять. Вы можете добавить флаги ссылок, чтобы убедиться, что у вас есть все.