Преобразование Linux библиотечного проекта в библиотечный проект, используемый в windows - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь преобразовать проект библиотеки ndn, найденный в "https://github.com/named-data/ndn-cpp", во что-то, что можно импортировать в несколько существующих проектов Visual Studio mfc / wpf / form (создавая его как .lib или. DLL будет работать).

Как примечание, он, кажется, ранее был преобразован в c# для windows для более старой сборки ndn, но больше не поддерживается и не будет подключаться к текущей сети ndn. (https://github.com/named-data/ndn-dot-net)

Я рассмотрел использование функций WSL, которые они добавили к windows 10, и кроссплатформенных проектов Visual studio Linux, но, похоже, все они только быть в состоянии создать .exes, которые будут работать в windows, а не в .lib или .dll, которые можно импортировать в другой проект.

Я также изучил проект общих элементов, но я смог найти не похоже, что это сработает для того, что я пытаюсь сделать.

Наконец, я попытался использовать cygwin. Мне удалось скомпилировать и сгенерировать библиотеки стилей linux (.a) на моем компьютере windows 10, но когда я попытался сгенерировать стиль windows, файлы .o исчезли (g cc -shared -o mydll.dll mydll.o) Я столкнулся с большим количеством ссылочных ошибок, которые мне не удалось устранить.

Есть ли у кого-нибудь какие-либо рекомендации относительно того, какой из этих методов мне следует использовать, или если я должен пытаться некоторые другой метод целиком? У кого-нибудь есть хорошие ссылки или примеры того, как это сделать для кого-то с ограниченным Linux опытом?

Спасибо.

1 Ответ

0 голосов
/ 13 апреля 2020

Хорошо. Я попытался сделать это несколькими способами сейчас, и вот что я узнал, что может быть полезно кому-то еще, пытающемуся сделать это, а также то, где я стою до сих пор:

Если у вас простой Linux dll, который вы написали, можно скомпилировать как Windows dll, используя MSYS2 или MINGW, инструкции здесь: http://www.mingw.org/wiki/MSVC_and_MinGW_DLLs

Если у вас есть что-то более сложное, например Программа, которую я пытаюсь преобразовать выше, не может быть быстро конвертирована из Linux в windows, однако вы все равно можете скомпилировать вашу программу для windows с помощью Visual Studio. Вот как вы это делаете:

  1. Загрузить vcpkg с https://github.com/microsoft/vcpkg Это менеджер пакетов linux для windows, он позволит вам загрузить windows эквивалента многим распространенным Linux пакетам (для вышеупомянутого мне пришлось скачать boost и sqlite3)

  2. Создайте свой собственный unistd.h, вот ссылка на него: Есть ли замена для unistd.h для Windows (Visual C)?

  3. Get dirent.h для windows, вот ссылка на это: https://github.com/tronkko/dirent

  4. заменить экземпляры gmtime на _mkgmtime или переопределить gmtime как _mkgmtime: кросс-платформенное время

  5. Это дало мне около 90% пути (и примерно от 13 000 ошибок компилятора до примерно 30). Остальные ошибки до сих пор были для вызовов, где нет простого преобразования linux в windows и эти разделы кода должны были быть переписаны. (В приведенном выше коде это будет код сокета для соединений tcp / udp в файлах транспорта, Linux и Windows обрабатывают его довольно по-разному, boost имеет хорошее руководство по использованию сокетов в windows хотя: https://www.boost.org/doc/libs/1_60_0/more/getting_started/windows.html)

Вот и все. Надеюсь, это поможет кому-то еще. Я буду добавлять больше к этому ответу, поскольку я обнаруживаю новые вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...