Скомпилировать гопакет на windows 64bit

Я пытаюсь использовать Gopacket на моих окнах 10.
Я использую его, чтобы прослушивать и вводить пакеты непосредственно в / из сетевого адаптера.
Я могу легко скомпилировать и запустить свой код с GOARCH=386, но не могу в GOARCH=amd64.

Стоит заметить: я НЕ пытаюсь кросс-компилировать.
Я использую go1.6.windows-386 для компиляции 32-битной версии, и когда я пытаюсь скомпилировать с GOARCH = amd64, я использую go1.6.windows-amd64.

Я использовал TDM-GCC как linux, как инструменты компиляции.
Ошибка не является показательной. это просто говорит

c:/WpdPack/Lib/x64/wpcap.lib: error adding symbols: File in wrong format collect2.exe: error ld returned 1 exit status

Кому-нибудь удалось это построить, если это вообще возможно?

2 ответа

ОК, так что я понял это.
Для того, чтобы скомпилировать 64-битный gopacket для Windows, вам нужно сделать следующее:

  1. Установите go_amd64 (добавьте go binaries в ваш PATH)
  2. Установите TDM GCC x64 (добавьте двоичные файлы TDM-GCC в PATH)
  3. Также добавьте TDM-GCC\x86_64-w64-mingw32\bin в вашу PATH
  4. Установить Winpcap
  5. Загрузите пакет разработчика Winpcap и распакуйте его в C:\

Теперь дело в том, что отсутствуют файлы статических библиотек Linux
(libwpcap.a и libpacket.a) из папки lib/x64. Я не знаю, почему они не были
включены в пакет для разработчиков, но в любом случае вот как мы можем их сгенерировать:

  1. найти wpcap.dll и packet.dll на вашем компьютере (обычно в c:\windows\system32
  2. скопируйте их в другую временную папку, иначе вам нужно будет предоставить права администратора для следующих команд
  3. запустите gendef для этих файлов gendef wpcap.dll а также gendef packet.dll (доступно с помощью Менеджера установки MinGW, пакет mingw32-gendef)
  4. это сгенерирует.def файлы
  5. Теперь мы сгенерируем файлы статических библиотек:
  6. бежать dlltool --as-flags=--64 -m i386:x86-64 -k --output-lib libwpcap.a --input-def wpcap.def
  7. а также dlltool --as-flags=--64 -m i386:x86-64 -k --output-lib libpacket.a --input-def packet.def
  8. Теперь просто скопируйте оба libwpcap.a и libpacket.a в c:\WpdPack\Lib\x64

Вот и все.
Теперь гопакет должен скомпилироваться без проблем.

Я установил Npcap в Windows в "Режиме совместимости с Wpcap API" иgopacket теперь работает нормально.

Большое спасибо за решение, оно сэкономило мне много времени!

Просто хотел добавить, что вы можете сделать то же самое с Npcap, измените исходный код gopacket так, чтобы он указывал на Npcap, и он тоже будет работать.

Если вы не знаете Npcap:

Другие вопросы по тегам