Скомпилировать гопакет на 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, вам нужно сделать следующее:
- Установите go_amd64 (добавьте go binaries в ваш PATH)
- Установите TDM GCC x64 (добавьте двоичные файлы TDM-GCC в PATH)
- Также добавьте TDM-GCC\x86_64-w64-mingw32\bin в вашу PATH
- Установить Winpcap
- Загрузите пакет разработчика Winpcap и распакуйте его в C:\
Теперь дело в том, что отсутствуют файлы статических библиотек Linux
(libwpcap.a и libpacket.a) из папки lib/x64. Я не знаю, почему они не были
включены в пакет для разработчиков, но в любом случае вот как мы можем их сгенерировать:
- найти wpcap.dll и packet.dll на вашем компьютере (обычно в c:\windows\system32
- скопируйте их в другую временную папку, иначе вам нужно будет предоставить права администратора для следующих команд
- запустите gendef для этих файлов
gendef wpcap.dll
а такжеgendef packet.dll
(доступно с помощью Менеджера установки MinGW, пакет mingw32-gendef) - это сгенерирует.def файлы
- Теперь мы сгенерируем файлы статических библиотек:
- бежать
dlltool --as-flags=--64 -m i386:x86-64 -k --output-lib libwpcap.a --input-def wpcap.def
- а также
dlltool --as-flags=--64 -m i386:x86-64 -k --output-lib libpacket.a --input-def packet.def
- Теперь просто скопируйте оба libwpcap.a и libpacket.a в c:\WpdPack\Lib\x64
Вот и все.
Теперь гопакет должен скомпилироваться без проблем.
Я установил Npcap в Windows в "Режиме совместимости с Wpcap API" иgopacket
теперь работает нормально.
Большое спасибо за решение, оно сэкономило мне много времени!
Просто хотел добавить, что вы можете сделать то же самое с Npcap, измените исходный код gopacket так, чтобы он указывал на Npcap, и он тоже будет работать.
Если вы не знаете Npcap: