File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libnet / README.win32
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Sep 27 11:11:37 2023 UTC (8 months, 4 weeks ago) by misho
Branches: libnet, MAIN
CVS tags: v1_2p1, HEAD
Version 1.2p1

    1: Information, Recommendations and Build Instructions for Windows
    2: **************************************************************************
    3: 
    4: _____________________________ IMPORTANT _____________________________
    5: The execution of the currently shipped msvcbuild.bat batch script will
    6: causes ANY subsequent none-MSVC build to fail. It has been wrongly set
    7: up to copy several MSVC-specific header files from <libnet-root>/win32/
    8: to <libnet-root>/include/ and <libnet-root>/include/libnet/ during the
    9: build process. This is a high priority issue and will be taken care of
   10: ASAP. If you ever have to make use of this file, consider compiling all
   11: other builds from a separate tarball.
   12: _____________________________________________________________________
   13: 
   14: This file list additional steps and suggestions for Windows users.
   15: Please see INSTALL for a more general overview and doc/PORTED for
   16: other platforms.
   17: 
   18: Unless you know what you are doing, you should follow the recommendations
   19: below. Notice that there are plenty of other (sometimes better) ways
   20: to build libnet, but these steps and suggestions are known to work.
   21: If the build breaks, please re-read this guide carefully.
   22: 
   23: Contents
   24: ========
   25: 
   26: 1. Introduction
   27:     1.1 Microsoft Visual C++ and GCC/MinGW
   28:     1.2 WinPcap/Npcap
   29:     1.3 Supported Operating Systems
   30: 
   31: 2. MinGW Compiler
   32:     2.1 Native
   33:     2.2 Cross-Compiling
   34: 
   35: 3. Microsoft Visual C++
   36: 
   37: 
   38: 
   39: 1. Introduction
   40: ===============
   41: 
   42: 
   43: 1.1 Microsoft Visual C++ and GCC/MinGW
   44: --------------------------------------------------------------
   45: 
   46: The Microsoft Visual C++ compiler (aka MSVC) and the GCC Windows port
   47: (aka MinGW) are unfortunately not fully compatible. Although MSVC is a
   48: great compiler, libnet has been developed with the GNU toolchain in mind.
   49: So building libnet with the Visual C++ Build Tools will always have its
   50: flaws, even while it might work in some points.
   51: 
   52: Most of libnet’s development is therefore done with GCC and its MinGW
   53: Windows port.
   54: In other words, if this this all new to you, I recommended you to use
   55: MinGW for building libnet on Windows.
   56: 
   57: 
   58: On the other hand, the two can work well together:
   59: 
   60: If you for instance build libnet with MinGW, and you want to use it
   61: with MSVC too (or vice versa), you can use the DLL and the supplied
   62: "libnet*.def" file located in <libnet-root>/win32/ (this file is always
   63: rebuild at the end of every successful build on windows) to create an
   64: MSVC compatible import library that you can use to link your projects
   65: with without the need of rebuilding libnet again.
   66: 
   67: To produce a MinGW compatible import library from any libnet DLL:
   68: 
   69: $ dlltool -D path/to/libnet*.dll -d path/to/libnet*.def -l libnet.dll.a
   70: 
   71: To produce a MSVC compatible import library from any libnet DLL:
   72: 
   73: $ lib /machine:X64 /def:example.def (for x64)
   74: or
   75: $ lib /machine:X86 /def:example.def (for x86)
   76: 
   77: Note 1: If you have removed any or all symbol information from the DLL
   78: (aka "stripped" it), during build, by for example running configure
   79: with "--enable-fast", then this obviously won't work.
   80: 
   81: 
   82: 1.2 WinPcap/Npcap
   83: -----------------
   84: 
   85: Currently, the supported method of sending packets under Windows is with
   86: WinPcap (http://www.winpcap.org). However, libnet's support for
   87: Npcap (http://www.npcap.org), an update of WinPcap sponsored by the
   88: Nmap Project, is being seriously considered.
   89: Windows users should know that with the switch to Npcap, WinPcap compatibility
   90: is expected to be deprecated.
   91: 
   92: Please be sure to install the WinPcap/Npcap driver/DLL and make sure
   93: that the content of the Wpdpack's/Npcap SDK's Include and Lib directories
   94: are somewhat reachable by your compiler.
   95: 
   96: Note 2: Remember that you cannot use MSVC-generated .lib files to create
   97: shared libraries with MinGW, you have to use the lib*.a files.
   98: WinPcap development came to a standstill before the Developer's Pack ever
   99: provided x64 compatible lib*.a files for use with MinGW/Cygwin. And since
  100: libnet depends on WinPcap, you would have to compile 64-bit lib*.a libraries
  101: yourself if you want to be able to produce 64-bit compatible libnet builds
  102: with MinGW/Cygwin.
  103: 
  104: Luckily for you, this has been taken care of by me. 64-bit compatible
  105: WinPcap libraries as well as DIY instructions can be found in
  106: <libnet-root>/win32/wpdpack/.
  107: 
  108: 1.3 Supported Operating Systems
  109: -------------------------------
  110: 
  111: At the latest with the switch to Npcap, libnet support for Windows XP,
  112: Windows Server 2003 and earlier will be dropped.
  113: I can think of too many better things to do than to continuously deal with
  114: error handling and backwards compatibility (msvcrt vs crtdll) for EOL systems.
  115: 
  116: Remnants in the source suggests that building libnet with Cygwin must have
  117: been possible at some point. This may or may not be the case these days.
  118: If it still works, let me know. If you get it to work (again), let me know.
  119: And if you need to get it to work, let me know.
  120: 
  121: 
  122: 2. MinGW Compiler
  123: =================
  124: 
  125: Both native and cross compilation are possible, and there are quite a
  126: few possibilities and options to choose from. If you just want to get
  127: over with it, follow these steps:
  128: 
  129: Known traps are:
  130: - Setting the wrong (or no) prefix. (important when running 'make install')
  131: - Using incompatible WinPcap libraries for x64 (see Note 2)
  132: - Not having said WinPcap libraries and header files in your compiler's path
  133: 
  134: Note 3: If you're building with MinGW, and want to install libnet to your
  135: compiler's lib and include directories, you almost always want to set your
  136: prefix manually. If you don't know what that means, run "gcc -v", look for
  137: "--prefix=/some/path" and use that.
  138: 
  139: Note 4: If you're using a multilib MinGW-w64 GCC compiler, make sure to add
  140: the -m32 or -m64 CFLAGS to instruct the compiler to build for your desired
  141: architecture.
  142: 
  143: 
  144: 2.1 Native
  145: ----------
  146: 
  147: The recommended MinGW distribution for building libnet is Msys2.
  148: First, follow the installation instructions for Msys2 available at
  149: msys2.github.io. Then, depending on your desired target architecture,
  150: open a mingw32 or mingw64 shell, navigate to the source directory,
  151: and execute the following commands:
  152: 
  153: 1. If you want to produce 32 bit binaries:
  154: 
  155: $ CFLAGS="-O2 -Wall -I$(pwd)/win32/wpdpack/Include" LDFLAGS="-L$(pwd)/win32/wpdpack/Lib/" ./configure --prefix=/mingw64
  156: 
  157: If you want to produce 64 bit binaries:
  158: 
  159: $ CFLAGS="-O2 -Wall -I$(pwd)/win32/wpdpack/Include" LDFLAGS="-L$(pwd)/win32/wpdpack/Lib/x64" ./configure --prefix=/mingw64
  160: 
  161: 2. $ make
  162: 
  163: 3. $ make install (optional)
  164: 
  165: 
  166: 2.2 Cross-Compiling
  167: -------------------
  168: 
  169: Note 5: During sample building, you may see a warning similar this:
  170: 
  171:             Could not determine the host path corresponding to
  172:                         `... a path ...'
  173:             Continuing, but uninstalled executables may not work.
  174: 
  175: This, among other things, means that the samples will depend on
  176: a shared version of libgcc (aka libgcc_s_sjlj-1.dll). If no shared
  177: version of libgcc was built when the compiler was configured, you
  178: most likely won't be able to execute them.
  179: In that case, your best bet is to link with the static version
  180: of libgcc by disabling shared libraries altogether
  181: (./configure --disable-shared).
  182: 
  183: 
  184: In general, you should know what you're doing and what your host, target
  185: and compiler are all about beforehand.
  186: These steps have been successfully tested on Ubuntu and the default
  187: mingw32-w32 toolchain (GCC 4.8).
  188: The recommended steps to build libnet therefore are:
  189: 
  190: 1. If you're targeting x86:
  191: $ CFLAGS="-O2 -Wall -I$(pwd)/win32/wpdpack/Include" LDFLAGS="-L$(pwd)/win32/wpdpack/Lib" ./configure --host=i686-w64-mingw32 --prefix=/usr/i686-w64-mingw32
  192: 
  193: If you're targeting x64:
  194: $ CFLAGS="-O2 -Wall -I$(pwd)/win32/wpdpack/Include" LDFLAGS="-L$(pwd)/win32/wpdpack/Lib/x64" ./configure --host=x86_64-w64-mingw32 --prefix=/usr/x86_64-w64-mingw32
  195: 
  196: 2. make
  197: 
  198: 3. (optionally) sudo make install
  199: 
  200: Notice that the --host option is usually all you need for cross-compiling.
  201: 
  202: Note 6: Although the steps should be very similar, if you're using any
  203: other distribution of MinGW (cross or native), you're pretty much on
  204: your own.  Suggestions, bug reports/fixes, and pull requests, see:
  205: https://github.com/libnet/libnet/issues
  206: 
  207: 
  208: 3. Microsoft Visual C++
  209: =======================
  210: Known traps are:
  211: - Not using the correct (x86 or x64) version of the Visual Studio command prompt
  212: - Using incompatible WinPcap libraries for x64 (see Note 2)
  213: - Not having said WinPcap libraries and header files in your compiler's path
  214: 
  215: Until the issue described at the top of this document is completely
  216: resolved, MSVC support should be considered a work in progress and unsafe.
  217: And that’s why I won't even go into it, and instead leave you with these
  218: old but still perfectly fine instructions:
  219: 
  220: 
  221: 
  222: Run msvcbuild.bat to build for Win32 with MSVC
  223: ----------------------------------------------
  224: 
  225: The batch file takes arguments and sets the appropriate path and environment
  226: variables for the desired built by running either vsvars32.bat (for x86),
  227: vcvars64.bat (for x64) or vcvarsall.bat (for Cross development).
  228: Type "msvcbuild.bat help" for a description of all available options.
  229: If no argument is specified, x86 is assumed.
  230: 
  231: The batch file copies pre-prepared headers out of win32/, avoiding the
  232: requirement for a gnu (Cygwin or MinGW) build environment.
  233: 
  234: The batch file hard-codes the location of the WinPcap developer's tools.
  235: You may have to modify it for your environment, or install the developer's
  236: pack in the expected location.
  237: 
  238: Although not required, it is advisable to execute the batch file from a
  239: VS2015 Developer Command Prompt.
  240: 
  241: For Visual Studio 2015, the shell can be found at:
  242: 
  243:     Program Files (x86) >> Microsoft Visual Studio 14.0 >> Common7 >> Tools >> VsDevCmd.bat
  244: 
  245: After building, libnet libraries and .obj files are found in newly created
  246: "<libnet-root>\libnet\src\[Win32|Win64]\" "<libnet-root>\libnet\lib\[x86|x64]\"
  247: respectively.

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>