Wireshark-dev: Re: [Wireshark-dev] Building libsmi from SVN as a .dll
From: Andrew Hood <ajhood@xxxxxxxxx>
Date: Wed, 16 Apr 2008 09:22:38 +1000
Anders Broman wrote: > Hi, > I have experemented with building libsmi.dll from libsmi SVN > _http://www.ibr.cs.tu-bs.de/svn/libsmi_ with the included makefile-dll > and smi.def file > > It builds under MSVC6 I have not tested it but if some one likes to play > with it - here it is... > If you find any errors please let me know. I've managed to get your makefile to work with MSVC8. My version attached. A few more -Dxxx make the compiler and linker happy. Adding smiFree to smi.h and EXPORTing it from the DLL lets the memory that is currently being leaked be freed. Juergen agrees this is OK. If have added these to smi.h and EXPORTed them: extern void *smiMalloc(size_t size); extern void *smiRealloc(void *ptr, size_t size); extern char *smiStrdup(const char *s1); extern char *smiStrndup(const char *s1, size_t n); extern void smiFree(void *ptr); I think I have also tracked down one of the reasons wireshark crashes. Take this snippet: ICS3-MIB DEFINITIONS ::= BEGIN IMPORTS OBJECT-TYPE FROM RFC-1212 TRAP-TYPE FROM RFC-1215 westellInterchangeProducts FROM WESTELL-GENERAL-MIB; ics3 OBJECT IDENTIFIER ::= { westellInterchangeProducts 2 2 } smilint gives this warning. ./ICS3-MIB:16: warning: implicit node definition At line 595 oids.c calls smiRenderOID to format the node. The implicit node is not completely filled in, and wireshark/tshark crashes in libsmi. This is not totally unreasonable since implicit nodes should never be seen. Adding: if (kind == OID_KIND_UNKNOWN) continue; (you will have to separate the declarations and initialisations of oid and oid_data) before that call stops the crash. -- There's no point in being grown up if you can't be childish sometimes. -- Dr. Who
# # makefile -- # # Makefile for VC++ (tested with version 6.0) for compiling # libsmi and associated tools natively under Win32. # # Copyright (c) 2000-2003 Yigal Hochberg, DMH Software. # Copyright (c) 2000 E. Schoenfelder, Gaertner Datensysteme Braunschweig. # Copyright (c) 2000 J. Schoenwaelder, Technical University of Braunschweig. # # See the file "COPYING" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # @(#) $Id: makefile 3226 2006-02-27 21:48:23Z schoenw $ ## ## Project directories -- these may need to be customized for your site ## ## ROOT -- top of the source tree. ## TMPDIR -- location for .obj files. ## TOOLS32 -- location of VC++ compiler installation. ## ROOT = .\.. TMPDIR = . #TOOLS32 = C:\MSDEV #TOOLS32 = C:\PROGRA~1\MICROS~2\VC98 TOOLS32 = "C:\Program Files\Microsoft Visual Studio 8\VC" ## ## Installation paths: ## ## MIBROOT -- definition for default search path (unix-style) ## MIBDIR -- same in windows style ## PIBDIR -- same in windows style ## BINDIR -- destination for the binaries (smidump.exe, ...) ## LIBDIR -- destination for the library (smi.lib) ## MIBROOT = c:/usr/local/snmp/mibs PIBROOT = c:/usr/local/snmp/pibs INSTROOT = c:\usr\local MIBDIR = $(INSTROOT)\snmp\mibs PIBDIR = $(INSTROOT)\snmp\pibs BINDIR = $(INSTROOT)\wbin LIBDIR = $(INSTROOT)\wbin ## ## Visual C++ tools ## PATH=$(TOOLS32)\bin;$(PATH) cc32 = cl CP = copy RM = del MKDIR = -mkdir ## ## Definitions: ## # DEBUG = -W3 -Zi -Od /Yd DEBUG = /W3 /Zi /Od /DEBUG /GS /Wp64 /Yd INCLUDES = -I$(ROOT)\lib -I$(ROOT)\win -I$(TOOLS32)\include DEFINES = $(DEBUG) -D_CRT_SECURE_NO_DEPRECATE=1 !include <win32.mak> ## ## Global makefile settings ## LIBSMIOBJS = \ $(TMPDIR)\win.obj \ $(TMPDIR)\shhopt.obj \ $(TMPDIR)\data.obj \ $(TMPDIR)\check.obj \ $(TMPDIR)\error.obj \ $(TMPDIR)\util.obj \ $(TMPDIR)\smi.obj \ $(TMPDIR)\parser-smi.obj \ $(TMPDIR)\scanner-smi.obj \ $(TMPDIR)\parser-sming.obj \ $(TMPDIR)\scanner-sming.obj \ $(TMPDIR)\snprintf.obj SMIQUERYOBJS = \ $(TMPDIR)\smiquery.obj \ SMILINTOBJS = \ $(TMPDIR)\smilint.obj \ SMIXLATEOBJS = \ $(TMPDIR)\smixlate.obj \ $(TMPDIR)\dstring.obj \ SMIDUMPOBJS = \ $(TMPDIR)\smidump.obj \ $(TMPDIR)\dump-sming.obj \ $(TMPDIR)\dump-smi.obj \ $(TMPDIR)\dump-imports.obj \ $(TMPDIR)\dump-types.obj \ $(TMPDIR)\dump-tree.obj \ $(TMPDIR)\dump-mosy.obj \ $(TMPDIR)\dump-corba.obj \ $(TMPDIR)\dump-netsnmp.obj \ $(TMPDIR)\dump-jax.obj \ $(TMPDIR)\dump-xml.obj \ $(TMPDIR)\dump-cm.obj \ $(TMPDIR)\dump-metrics.obj \ $(TMPDIR)\dump-identifiers.obj \ $(TMPDIR)\dump-python.obj \ $(TMPDIR)\dump-perl.obj \ $(TMPDIR)\dump-scli.obj \ $(TMPDIR)\dump-xsd.obj \ $(TMPDIR)\dump-sppi.obj \ $(TMPDIR)\dump-sizes.obj \ $(TMPDIR)\dump-svg.obj \ $(TMPDIR)\dump-compliance.obj \ $(TMPDIR)\dump-boilerplate.obj \ $(TMPDIR)\dump-yang.obj \ $(TMPDIR)\fprint.obj \ $(TMPDIR)\rea.obj \ $(TMPDIR)\fortopat.obj SMIDIFFOBJS = \ $(TMPDIR)\smidiff.obj \ SMILIB = smi.lib SMIDLL = smi.dll ## ## Implicit Targets ## .c.obj: $(cc32) $(cdebug) $(cflags) $(INCLUDES) \ $(DEFINES) -Fo$(TMPDIR)\ $< {$(ROOT)\lib}.c{$(TMPDIR)}.obj: $(cc32) $(cdebug) $(cflags) -D_DLL -D_MT /MD $(INCLUDES) \ -DYYMALLOC=malloc -DYYFREE=free \ $(DEFINES) -Fo$(TMPDIR)\ $< {$(ROOT)\tools}.c{$(TMPDIR)}.obj: $(cc32) $(cdebug) $(cflags) -D_DLL -D_MT /MD $(INCLUDES) \ $(DEFINES) -Fo$(TMPDIR)\ $< ## ## Targets ## all: libs tools libs: $(SMILIB) $(SMIDLL) # special compilation rules # (flex-src avoids missing unistd.h if _Win32 defined) # $(TMPDIR)\scanner-smi.obj : $(ROOT)\lib\scanner-smi.c $(cc32) $(cdebug) $(cflags) -D_DLL -D_MT /MD -D_Win32 -D__STDC__ $(INCLUDES) \ -DYY_NEVER_INTERACTIVE \ $(DEFINES) -Fo$(TMPDIR)\ $? $(TMPDIR)\scanner-sming.obj : $(ROOT)\lib\scanner-sming.c $(cc32) $(cdebug) $(cflags) -D_DLL -D_MT /MD -D_Win32 -D__STDC__ $(INCLUDES) \ -DYY_NEVER_INTERACTIVE \ $(DEFINES) -Fo$(TMPDIR)\ $? $(SMIDLL): $(SMILIB) # $(link) -entry:_DllMainCRTStartup@12 -dll /NODEFAULTLIB /INCREMENTAL:NO /PDB:NONE /RELEASE /NOLOGO msvcrt.lib oldnames.lib kernel32.lib ws2_32.lib shell32.lib /DEF:smi.def /OUT:$(SMIDLL) /IMPLIB:$(SMILIB) $(LIBSMIOBJS) link $(dlllflags) $(conlibsdll) /NODEFAULTLIB /machine:i386 msvcrt.lib shell32.lib version.lib /DEBUG /DEF:smi.def /OUT:smi.dll /IMPLIB:smi.lib $(LIBSMIOBJS) $(SMILIB): $(LIBSMIOBJS) $(implib) /out:smi.lib $(LIBSMIOBJS) tools: smiquery.exe smilint.exe smixlate.exe smidump.exe smidiff.exe smiquery.exe: $(SMIQUERYOBJS) $(SMILIB) $(cc32) $(DEFINES) /osmiquery.exe $(SMIQUERYOBJS) $(SMILIB) smilint.exe: $(SMILINTOBJS) $(SMILIB) $(cc32) $(DEFINES) /osmilint.exe $(SMILINTOBJS) $(SMILIB) smidump.exe: $(SMIDUMPOBJS) $(SMILIB) $(cc32) $(DEFINES) \ /osmidump.exe $(SMIDUMPOBJS) $(SMILIB) smidiff.exe: $(SMIDIFFOBJS) $(SMILIB) $(cc32) $(DEFINES) \ /osmidiff.exe $(SMIDIFFOBJS) $(SMILIB) smixlate.exe: $(SMIXLATEOBJS) $(SMILIB) $(cc32) $(DEFINES) \ /osmixlate.exe $(SMIXLATEOBJS) $(SMILIB) clean: rm -f *.lib rm -f *.obj rm -f *.exe rm -f *.ilk rm -f *.pdb rm -f *.mdp install: all install-doc install-bin install-lib install-mibs install-pibs install-doc: $(MKDIR) $(INSTROOT) $(CP) ..\README $(INSTROOT) $(CP) ..\COPYING $(INSTROOT) $(CP) README.win $(INSTROOT) $(MKDIR) $(INSTROOT)\doc $(CP) ..\doc\*.txt $(INSTROOT)\doc $(CP) ..\doc\*.ps $(INSTROOT)\doc install-bin: $(MKDIR) $(BINDIR) $(CP) *.exe $(BINDIR) install-lib: $(MKDIR) $(LIBDIR) $(CP) *.lib $(LIBDIR) install-mibs: $(MKDIR) $(MIBDIR) $(MKDIR) $(MIBDIR)\iana $(CP) ..\mibs\iana\*.* $(MIBDIR)\iana $(MKDIR) $(MIBDIR)\ietf $(CP) ..\mibs\ietf\*.* $(MIBDIR)\ietf $(MKDIR) $(MIBDIR)\irtf $(CP) ..\mibs\irtf\*.* $(MIBDIR)\irtf $(MKDIR) $(MIBDIR)\tubs $(CP) ..\mibs\tubs\*.* $(MIBDIR)\tubs $(MKDIR) $(MIBDIR)\site install-pibs: $(MKDIR) $(PIBDIR) $(MKDIR) $(PIBDIR)\ietf $(CP) ..\pibs\ietf\*.* $(PIBDIR)\ietf $(MKDIR) $(PIBDIR)\tubs $(CP) ..\pibs\tubs\*.* $(PIBDIR)\tubs $(MKDIR) $(PIBDIR)\site # # Local Variables: # mode: makefile # make: "nmake" # eval: (set (make-local-variable 'this-file) (file-name-nondirectory buffer-file-name)) # eval: (set (make-local-variable 'compile-command) (concat make " -k -f " this-file)) # End: # # EOF: makefile
- Follow-Ups:
- Re: [Wireshark-dev] [libsmi] Re: Building libsmi from SVN as a .dll
- From: Juergen Schoenwaelder
- Re: [Wireshark-dev] [libsmi] Re: Building libsmi from SVN as a .dll
- From: Juergen Schoenwaelder
- Re: [Wireshark-dev] [libsmi] Re: Building libsmi from SVN as a .dll
- References:
- [Wireshark-dev] Building libsmi from SVN as a .dll
- From: Anders Broman
- [Wireshark-dev] Building libsmi from SVN as a .dll
- Prev by Date: Re: [Wireshark-dev] Problems building on Windows XP
- Next by Date: [Wireshark-dev] buildbot failure in OSX-10.4-PPC
- Previous by thread: [Wireshark-dev] Building libsmi from SVN as a .dll
- Next by thread: Re: [Wireshark-dev] [libsmi] Re: Building libsmi from SVN as a .dll
- Index(es):