- 浏览: 150097 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
lanhaitun1991:
亲,其实你这里介绍的方法有一个最大的问题:如果放入队列之后,但 ...
分布式事务 -
lp385267935:
不错 很好用~3Q
jsonlib json-->object,忽略object中没有的属性 -
xiebo1983:
http://www.sqkoo.com/show/detai ...
mysql latin1乱码 -
envy2002:
当然可以了,tomcat中源码你可以看看,只要“欺骗”过去to ...
tomcat中的长连接 -
newSaa:
问一下,可以在 tomcat 建立tcp 长连接吗?
tomcat中的长连接
今天学习了一下Makefile,由于没有搞清楚makefile的执行过程差点又崩溃了,呵呵。
我学些的是firedrill的makefile,开始觉得其好“智能”,其实并不十分智能。
先看一下目录结构:
httptunnel---config
|
---docs
|
---src----libhttpun---------------------- 1.c,1.h
| |
-----main.cc ----- 2.c, 2.h
| |
-----Makefile ------Makefile
|
----
我们先看一下src下面的Makefile:
# (C) 2005 Richard Mills / The Linux Academy Ltd.
#
# Makefile for HTTPTunnel
#
# $Id: Makefile.HTTPTUNNEL,v 1.36 2009-04-03 11:46:17 rich Exp $
#############
# Global bits
#############
#定义的变量
SHELL= /bin/sh
OS= $(shell uname -s)
CC= g++
SVRAUTH= FILE
SSL= NO
NAME= HTTPTUNNEL
LIBDIRS= libhttptun
APPOBJS= main.o
# Default auth settings
AUTHLIBS=
# Default SSL settings
SSLLIBS=
SSLKEY=
SSLCERT=
SSLDEPENDS=
# Server authentication settings
ifeq ($(SVRAUTH),DB)
AUTHLIBS= -lmysqlpp
endif
# SSL settings
ifeq ($(SSL),YES)
SSLKEY= SSLKey.pem
SSLCERT= SSLCert.pem
SSLDEPENDS= $(SSLKEY) $(SSLCERT)
endif
# Application name
TUNLIBNAME= libhttptun/libhttptun.a
FDSNAME= Firedrill
FDANAME= firedrill
HTSNAME= HTTPTunnel
HTANAME= httptunnel
ifeq ($(NAME),FIREDRILL)
NAMEFLAGS= -DSTRNAME=\"${FDSNAME}\"
APPNAME= $(FDANAME)
else
NAMEFLAGS= -DSTRNAME=\"${HTSNAME}\"
APPNAME= $(HTANAME)
endif
# Build objects
TUNAPPOBJS= $(APPOBJS)
GLOBALLIBS= -lpthread
# Linux specific
ifeq ($(findstring Linux,$(OS)),Linux)
ifeq ($(SSL),YES)
SSLLIBS= -lssl
endif
PLATFORMLIBS= $(SSLLIBS)
endif
# Solaris specific
ifeq ($(findstring SunOS,$(OS)),SunOS)
ifeq ($(SSL),YES)
SSLLIBS= -L/usr/local/ssl/lib -lssl -lcrypto -ldl
endif
PLATFORMLIBS= $(SSLLIBS) -lsocket -lnsl -lrt
endif
# Mac OS X specific
ifeq ($(findstring Darwin,$(OS)),Darwin)
ifeq ($(SSL),YES)
SSLLIBS= -lssl -lcrypto
endif
PLATFORMLIBS= $(SSLLIBS)
endif
# Cygwin specific
ifeq ($(findstring CYGWIN,$(OS)),CYGWIN)
ifeq ($(SSL),YES)
SSLLIBS= -lssl -lcrypto
endif
PLATFORMLIBS= $(SSLLIBS)
endif
# Includes & compile flags
VERSION= 1.3.2
INCLUDES= -I. -I./libhttptun
#DEBUGCFLAGS= -g -DDEBUG_TUN -DDEBUG_LOG_DATA -DDEBUG_THREADS -DDEBUG_EVENTS
#DEBUGCFLAGS= -g -DDEBUG_TUN -DDEBUG_HTTP_MSG_LOSS
#DEBUGCFLAGS= -g -DDEBUG_TUN
DEBUGCFLAGS= -g
GLOBALCFLAGS= -Wall -DVERSION=\"$(VERSION)\" $(NAMEFLAGS) $(DEBUGCFLAGS)
CCFLAGS= $(GLOBALCFLAGS) $(INCLUDES)
LIBS= $(GLOBALLIBS) $(AUTHLIBS) $(PLATFORMLIBS)
# Dependencies
GLOBALDEPS= Makefile
TUNAPPDEPENDS= $(patsubst %.o,%.d,$(TUNAPPOBJS))
DEPENDS= $(TUNAPPDEPENDS) $(TSTAPPDEPENDS)
#############
# Build rules
#############
#makefile程序执行的入口
# Top level
.PHONY: all #表明all并不是真正的文件,是个指令
all: depend libdirs $(APPNAME) $(SSLDEPENDS)
#all 这个指令依赖 后来4个文件,或者伪指令,$(**)表示的是文件,depend,libdirs可以
#从后面判断是伪指令。
# Dependencies
include $(DEPENDS)
%.d: %.cc
@echo -- makedepend $@
@bash -c '$(CC) $(CCFLAGS) -M $(<F) >$(*F).d; \
[ -s $(*F).d ] || rm -f $(*F).d '; \
exit_status=$$? ; \
if [ $${exit_status} -ne 0 ]; then exit $${exit_status}; fi
.PHONY: depend #表明depend是伪指令
depend: $(DEPENDS)
echo 'depend \n'
# SSL
$(SSLKEY):
openssl genrsa -out $(SSLKEY) 1024
$(SSLCERT): $(SSLKEY)
openssl req -new -x509 -key $(SSLKEY) -batch -subj /O=TheLinuxAcademy \
-out $(SSLCERT)
# Library
.PHONY: libdirs $(LIBDIRS) #libdirs,$(LIBDIRS)都是伪指令
libdirs: $(LIBDIRS)
echo 'libdirs \n'
$(LIBDIRS):
echo 'LIBDIRS \n'
$(MAKE) -C $@
# Application
$(APPNAME): $(TUNAPPOBJS) libdirs
echo '222222\n'
$(CC) -o $(APPNAME) $(TUNAPPOBJS) $(TUNLIBNAME) $(LIBS)
echo '333333\n'
%.o: %.cc $(GLOBALDEPS)
echo 'aaaaaaa \n'
$(CC) -c $(CCFLAGS) $*.cc
echo 'bbbbbb \n'
####################
# Other useful rules
####################
.PHONY: clean
clean:
cd libhttptun && $(MAKE) clean
rm -f $(APPNAME) *.o *.d core* *.pem
首先从定义变量,然后从all:那里执行,结果依赖depend,libdirs等,那就先执行depend标号后面的语句,
输出:depend
然后libdirs标号后面执行,libdirs又依赖$(LIBDIRS)标号,就跳到$(LIBDIRS)标号后面的语句执行:输出:
echo 'LIBDIRS \n'
$(MAKE) -C $@
跳到了libhttpun目录下,这个红色语句表明,执行这个目录下的makefile。
这就行堆栈一样,一层层执行,先进入,后回溯,呵呵。
我们也贴出libhttpun目录下的makefile欣赏一下:
# (C) 2008 Richard Mills / The Linux Academy Ltd.
# # Makefile for libhttptun # # $Id: Makefile.RELEASE,v 1.2 2009-03-20 11:52:25 rich Exp $ ############# # Global bits ############# SHELL= /bin/sh OS= $(shell uname -s) CC= g++ AR= ar SVRAUTH= FILE SSL= NO LIBOBJS= HTTPTunneler.o Logger.o Server.o ClientServer.o ServerServer.o \ Sock.o TCPSock.o UDPSock.o SSLSock.o Tunnel.o TestTunnel.o \ ClientTunnel.o TestClientTunnel.o ServerTunnel.o TestServerTunnel.o \ Tunneler.o ClientTunneler.o SOCKSClientTunneler.o ServerTunneler.o \ TunnelParms.o ClientTunnelParms.o ServerTunnelParms.o TuneSettings.o \ Reader.o RawReader.o SOCKSReader.o HTTPReader.o Writer.o \ RawWriter.o HTTPWriter.o Connection.o RawConnection.o \ DummyRawConnection.o SOCKSConnection.o HTTPConnection.o \ HTTPMsg.o HTTPRequestMsg.o HTTPResponseMsg.o HTTPGetMsg.o \ MsgParms.o HTTPMsgParms.o ErrorMsgParms.o AutoPtr.o TunnelStats.o \ Payload.o RawBuff.o Utils.o Time.o URLCode.o SeqNo.o Firewall.o \ MD5.o MD4.o DES.o OptionsParser.o GlobalConfig.o SideConfig.o \ ClientSideConfig.o ServerSideConfig.o ProxySettings.o \ TunnelConfig.o TunnelID.o TunnelerID.o Authenticator.o \ ClientAuthenticator.o ServerAuthenticator.o \ DefaultServerAuthenticator.o AuthDigest.o AuthSettings.o \ ServerAuthSettings.o User.o Quotas.o ConnectionManager.o \ ConnectProxy.o EventReceiver.o IdentifyEvent.o \ Event.o ConnectResultEvent.o ShutdownTunnelEvent.o \ TunnelDestroyedEvent.o \ ShutdownConnectionEvent.o ReadEvent.o ConnectionErrorEvent.o \ TunnelUnviableEvent.o MsgArrivedEvent.o TimedEvent.o ConnectEvent.o \ RawDataArrivedEvent.o PollTimeoutEvent.o CheckAckEvent.o \ SendMsgEvent.o LeakTunnelErrorEvent.o TunnelStateEvent.o \ ConnectionStateEvent.o ConnectionManagementEvent.o AuditEvent.o \ TunnelManagementEvent.o UDPSilentEvent.o FlushConnectionEvent.o \ LaunchServerTestEvent.o NewTunnelParmsEvent.o AuthSuccessEvent.o \ NTLM.o SecurityBuff.o ConfigBlob.o GlobalConfigBlob.o \ ClientConfigBlob.o ServerConfigBlob.o SockTunClientConfigBlob.o \ SockTunServerConfigBlob.o SockTunClient.o SockTunServer.o \ TCPSockTunServer.o UDPSockTunServer.o TCPSockTunClient.o \ UDPSockTunClient.o SockTunCallback.o SockTunHandle.o \ ClientSockTunHandle.o ServerSockTunHandle.o AddrInfo.o \ ThreadManager.o Thread.o Callback.o Mutex.o MutexVar.o ConditionVar.o CLIOBJS= testcli.o SVROBJS= testsvr.o # Default auth settings AUTHOBJS= AUTHLIBS= AUTHINCLUDES= AUTHFLAGS= # Default SSL settings SSLLIBS= SSLINCLUDES= SSLFLAGS= # Server authentication settings ifeq ($(SVRAUTH),DB) AUTHOBJS= DBServerAuthenticator.o DBUserDetails.o AUTHLIBS= -lmysqlpp AUTHINCLUDES= -I/usr/include/mysql -I/usr/include/mysql++ AUTHFLAGS= -DAUTH_DB endif ifeq ($(SVRAUTH),FILE) AUTHOBJS= FileServerAuthenticator.o AUTHFLAGS= -DAUTH_FILE endif # SSL settings ifeq ($(SSL),YES) SSLFLAGS= -DUSE_SSL endif # Application name TUNLIBNAME= libhttptun.a APPCLINAME= testcli APPSVRNAME= testsvr # Build objects TUNLIBOBJS= $(LIBOBJS) $(AUTHOBJS) APPCLIOBJS= $(CLIOBJS) APPSVROBJS= $(SVROBJS) GLOBALLIBS= -lpthread # Linux specific ifeq ($(findstring Linux,$(OS)),Linux) PLATFORMNAME= LINUX ifeq ($(SSL),YES) SSLINCLUDES= -I/usr/include/openssl SSLLIBS= -lssl endif PLATFORMLIBS= $(SSLLIBS) endif # Solaris specific ifeq ($(findstring SunOS,$(OS)),SunOS) PLATFORMNAME= SOLARIS ifeq ($(SSL),YES) SSLINCLUDES= -I/usr/local/ssl/include/openssl -I/usr/local/ssl/include SSLLIBS= -L/usr/local/ssl/lib -lssl -lcrypto -ldl endif PLATFORMLIBS= $(SSLLIBS) -lsocket -lnsl -lrt endif # Mac OS X specific ifeq ($(findstring Darwin,$(OS)),Darwin) PLATFORMNAME= OSX ifeq ($(SSL),YES) SSLINCLUDES= -I/usr/include/openssl SSLLIBS= -lssl -lcrypto endif PLATFORMLIBS= $(SSLLIBS) endif # Cygwin specific ifeq ($(findstring CYGWIN,$(OS)),CYGWIN) PLATFORMNAME= CYGWIN ifeq ($(SSL),YES) SSLINCLUDES= -I/usr/include/openssl SSLLIBS= -lssl -lcrypto endif PLATFORMLIBS= $(SSLLIBS) endif # Includes & compile flags VERSION= 1.3.2 PLATFORM= -DPLATFORM_$(PLATFORMNAME) -DPLATNAME=\"$(PLATFORMNAME)\" INCLUDES= -I. $(SSLINCLUDES) $(AUTHINCLUDES) #DEBUGCFLAGS= -g -DDEBUG_TUN -DDEBUG_LOG_DATA -DDEBUG_THREADS -DDEBUG_EVENTS #DEBUGCFLAGS= -g -DDEBUG_TUN -DDEBUG_HTTP_MSG_LOSS #DEBUGCFLAGS= -g -DDEBUG_TUN DEBUGCFLAGS= -g GLOBALCFLAGS= -Wall -DLIBVERSION=\"$(VERSION)\" $(PLATFORM) $(DEBUGCFLAGS) \ $(AUTHFLAGS) $(SSLFLAGS) CCFLAGS= $(GLOBALCFLAGS) $(INCLUDES) LIBS= $(GLOBALLIBS) $(AUTHLIBS) $(PLATFORMLIBS) # Dependencies GLOBALDEPS= Makefile TUNLIBDEPENDS= $(patsubst %.o,%.d,$(TUNLIBOBJS)) APPCLIDEPENDS= $(patsubst %.o,%.d,$(APPCLIOBJS)) APPSVRDEPENDS= $(patsubst %.o,%.d,$(APPSVROBJS)) DEPENDS= $(TUNLIBDEPENDS) $(APPCLIDEPENDS) $(APPSVRDEPENDS) ############# # Build rules ############# # Top level .PHONY: all all: depend $(TUNLIBNAME) # Dependencies include $(DEPENDS) %.d: %.cc @echo -- makedepend $@ @bash -c '$(CC) $(CCFLAGS) -M $(<F) >$(*F).d; \ [ -s $(*F).d ] || rm -f $(*F).d '; \ exit_status=$$? ; \ if [ $${exit_status} -ne 0 ]; then exit $${exit_status}; fi .PHONY: depend depend: $(DEPENDS) # Library $(TUNLIBNAME): $(TUNLIBOBJS) $(AR) -r $(TUNLIBNAME) $(TUNLIBOBJS) # Test applications .PHONY: test test: $(APPCLINAME) $(APPSVRNAME) $(TUNLIBNAME) $(APPCLINAME): $(CLIOBJS) $(TUNLIBNAME) $(CC) -o $(APPCLINAME) $(CLIOBJS) $(TUNLIBNAME) $(LIBS) $(APPSVRNAME): $(APPSVROBJS) $(TUNLIBNAME) $(CC) -o $(APPSVRNAME) $(APPSVROBJS) $(TUNLIBNAME) $(LIBS) %.o: %.cc $(GLOBALDEPS) $(CC) -c $(CCFLAGS) $*.cc #################### # Other useful rules #################### .PHONY: clean clean: rm -f $(TUNLIBNAME) $(APPCLINAME) $(APPSVRNAME) *.o *.d
最后的执行结果是这样的:
-- makedepend main.d
echo 'depend \n' depend echo 'LIBDIRS \n' LIBDIRS make -C libhttptun make[1]: Entering directory `/home/bardwu/bard/httptunnel/src/libhttptun' -- makedepend testsvr.d -- makedepend testcli.d -- makedepend FileServerAuthenticator.d -- makedepend ConditionVar.d -- makedepend MutexVar.d -- makedepend Mutex.d -- makedepend Callback.d -- makedepend Thread.d -- makedepend ThreadManager.d -- makedepend AddrInfo.d -- makedepend ServerSockTunHandle.d -- makedepend ClientSockTunHandle.d -- makedepend SockTunHandle.d -- makedepend SockTunCallback.d -- makedepend UDPSockTunClient.d -- makedepend TCPSockTunClient.d -- makedepend UDPSockTunServer.d -- makedepend TCPSockTunServer.d -- makedepend SockTunServer.d -- makedepend SockTunClient.d -- makedepend SockTunServerConfigBlob.d -- makedepend SockTunClientConfigBlob.d -- makedepend ServerConfigBlob.d -- makedepend ClientConfigBlob.d -- makedepend GlobalConfigBlob.d -- makedepend ConfigBlob.d -- makedepend SecurityBuff.d -- makedepend NTLM.d -- makedepend AuthSuccessEvent.d -- makedepend NewTunnelParmsEvent.d -- makedepend LaunchServerTestEvent.d -- makedepend FlushConnectionEvent.d -- makedepend UDPSilentEvent.d -- makedepend TunnelManagementEvent.d -- makedepend AuditEvent.d -- makedepend ConnectionManagementEvent.d -- makedepend ConnectionStateEvent.d -- makedepend TunnelStateEvent.d -- makedepend LeakTunnelErrorEvent.d -- makedepend SendMsgEvent.d -- makedepend CheckAckEvent.d -- makedepend PollTimeoutEvent.d -- makedepend RawDataArrivedEvent.d -- makedepend ConnectEvent.d -- makedepend TimedEvent.d -- makedepend MsgArrivedEvent.d -- makedepend TunnelUnviableEvent.d -- makedepend ConnectionErrorEvent.d -- makedepend ReadEvent.d -- makedepend ShutdownConnectionEvent.d -- makedepend TunnelDestroyedEvent.d -- makedepend ShutdownTunnelEvent.d -- makedepend ConnectResultEvent.d -- makedepend Event.d -- makedepend IdentifyEvent.d -- makedepend EventReceiver.d -- makedepend ConnectProxy.d -- makedepend ConnectionManager.d -- makedepend Quotas.d -- makedepend User.d -- makedepend ServerAuthSettings.d -- makedepend AuthSettings.d -- makedepend AuthDigest.d -- makedepend DefaultServerAuthenticator.d -- makedepend ServerAuthenticator.d -- makedepend ClientAuthenticator.d -- makedepend Authenticator.d -- makedepend TunnelerID.d -- makedepend TunnelID.d -- makedepend TunnelConfig.d -- makedepend ProxySettings.d -- makedepend ServerSideConfig.d -- makedepend ClientSideConfig.d -- makedepend SideConfig.d -- makedepend GlobalConfig.d -- makedepend OptionsParser.d -- makedepend DES.d -- makedepend MD4.d -- makedepend MD5.d -- makedepend Firewall.d -- makedepend SeqNo.d -- makedepend URLCode.d -- makedepend Time.d -- makedepend Utils.d -- makedepend RawBuff.d -- makedepend Payload.d -- makedepend TunnelStats.d -- makedepend AutoPtr.d -- makedepend ErrorMsgParms.d -- makedepend HTTPMsgParms.d -- makedepend MsgParms.d -- makedepend HTTPGetMsg.d -- makedepend HTTPResponseMsg.d -- makedepend HTTPRequestMsg.d -- makedepend HTTPMsg.d -- makedepend HTTPConnection.d -- makedepend SOCKSConnection.d -- makedepend DummyRawConnection.d -- makedepend RawConnection.d -- makedepend Connection.d -- makedepend HTTPWriter.d -- makedepend RawWriter.d -- makedepend Writer.d -- makedepend HTTPReader.d -- makedepend SOCKSReader.d -- makedepend RawReader.d -- makedepend Reader.d -- makedepend TuneSettings.d -- makedepend ServerTunnelParms.d -- makedepend ClientTunnelParms.d -- makedepend TunnelParms.d -- makedepend ServerTunneler.d -- makedepend SOCKSClientTunneler.d -- makedepend ClientTunneler.d -- makedepend Tunneler.d -- makedepend TestServerTunnel.d -- makedepend ServerTunnel.d -- makedepend TestClientTunnel.d -- makedepend ClientTunnel.d -- makedepend TestTunnel.d -- makedepend Tunnel.d -- makedepend SSLSock.d -- makedepend UDPSock.d -- makedepend TCPSock.d -- makedepend Sock.d -- makedepend ServerServer.d -- makedepend ClientServer.d -- makedepend Server.d -- makedepend Logger.d -- makedepend HTTPTunneler.d make[1]: Leaving directory `/home/bardwu/bard/httptunnel/src/libhttptun' make[1]: Entering directory `/home/bardwu/bard/httptunnel/src/libhttptun' g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. HTTPTunneler.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Logger.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Server.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ClientServer.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ServerServer.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Sock.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TCPSock.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. UDPSock.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SSLSock.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Tunnel.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TestTunnel.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ClientTunnel.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TestClientTunnel.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ServerTunnel.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TestServerTunnel.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Tunneler.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ClientTunneler.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SOCKSClientTunneler.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ServerTunneler.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TunnelParms.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ClientTunnelParms.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ServerTunnelParms.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TuneSettings.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Reader.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. RawReader.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SOCKSReader.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. HTTPReader.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Writer.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. RawWriter.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. HTTPWriter.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Connection.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. RawConnection.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. DummyRawConnection.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SOCKSConnection.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. HTTPConnection.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. HTTPMsg.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. HTTPRequestMsg.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. HTTPResponseMsg.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. HTTPGetMsg.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. MsgParms.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. HTTPMsgParms.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ErrorMsgParms.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. AutoPtr.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TunnelStats.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Payload.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. RawBuff.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Utils.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Time.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. URLCode.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SeqNo.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Firewall.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. MD5.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. MD4.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. DES.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. OptionsParser.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. GlobalConfig.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SideConfig.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ClientSideConfig.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ServerSideConfig.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ProxySettings.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TunnelConfig.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TunnelID.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TunnelerID.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Authenticator.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ClientAuthenticator.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ServerAuthenticator.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. DefaultServerAuthenticator.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. AuthDigest.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. AuthSettings.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ServerAuthSettings.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. User.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Quotas.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ConnectionManager.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ConnectProxy.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. EventReceiver.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. IdentifyEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Event.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ConnectResultEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ShutdownTunnelEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TunnelDestroyedEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ShutdownConnectionEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ReadEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ConnectionErrorEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TunnelUnviableEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. MsgArrivedEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TimedEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ConnectEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. RawDataArrivedEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. PollTimeoutEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. CheckAckEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SendMsgEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. LeakTunnelErrorEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TunnelStateEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ConnectionStateEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ConnectionManagementEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. AuditEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TunnelManagementEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. UDPSilentEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. FlushConnectionEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. LaunchServerTestEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. NewTunnelParmsEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. AuthSuccessEvent.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. NTLM.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SecurityBuff.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ConfigBlob.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. GlobalConfigBlob.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ClientConfigBlob.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ServerConfigBlob.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SockTunClientConfigBlob.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SockTunServerConfigBlob.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SockTunClient.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SockTunServer.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TCPSockTunServer.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. UDPSockTunServer.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TCPSockTunClient.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. UDPSockTunClient.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SockTunCallback.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SockTunHandle.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ClientSockTunHandle.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ServerSockTunHandle.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. AddrInfo.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ThreadManager.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Thread.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Callback.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Mutex.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. MutexVar.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ConditionVar.cc g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. FileServerAuthenticator.cc ar -r libhttptun.a HTTPTunneler.o Logger.o Server.o ClientServer.o ServerServer.o Sock.o TCPSock.o UDPSock.o SSLSock.o Tunnel.o TestTunnel.o ClientTunnel.o TestClientTunnel.o ServerTunnel.o TestServerTunnel.o Tunneler.o ClientTunneler.o SOCKSClientTunneler.o ServerTunneler.o TunnelParms.o ClientTunnelParms.o ServerTunnelParms.o TuneSettings.o Reader.o RawReader.o SOCKSReader.o HTTPReader.o Writer.o RawWriter.o HTTPWriter.o Connection.o RawConnection.o DummyRawConnection.o SOCKSConnection.o HTTPConnection.o HTTPMsg.o HTTPRequestMsg.o HTTPResponseMsg.o HTTPGetMsg.o MsgParms.o HTTPMsgParms.o ErrorMsgParms.o AutoPtr.o TunnelStats.o Payload.o RawBuff.o Utils.o Time.o URLCode.o SeqNo.o Firewall.o MD5.o MD4.o DES.o OptionsParser.o GlobalConfig.o SideConfig.o ClientSideConfig.o ServerSideConfig.o ProxySettings.o TunnelConfig.o TunnelID.o TunnelerID.o Authenticator.o ClientAuthenticator.o ServerAuthenticator.o DefaultServerAuthenticator.o AuthDigest.o AuthSettings.o ServerAuthSettings.o User.o Quotas.o ConnectionManager.o ConnectProxy.o EventReceiver.o IdentifyEvent.o Event.o ConnectResultEvent.o ShutdownTunnelEvent.o TunnelDestroyedEvent.o ShutdownConnectionEvent.o ReadEvent.o ConnectionErrorEvent.o TunnelUnviableEvent.o MsgArrivedEvent.o TimedEvent.o ConnectEvent.o RawDataArrivedEvent.o PollTimeoutEvent.o CheckAckEvent.o SendMsgEvent.o LeakTunnelErrorEvent.o TunnelStateEvent.o ConnectionStateEvent.o ConnectionManagementEvent.o AuditEvent.o TunnelManagementEvent.o UDPSilentEvent.o FlushConnectionEvent.o LaunchServerTestEvent.o NewTunnelParmsEvent.o AuthSuccessEvent.o NTLM.o SecurityBuff.o ConfigBlob.o GlobalConfigBlob.o ClientConfigBlob.o ServerConfigBlob.o SockTunClientConfigBlob.o SockTunServerConfigBlob.o SockTunClient.o SockTunServer.o TCPSockTunServer.o UDPSockTunServer.o TCPSockTunClient.o UDPSockTunClient.o SockTunCallback.o SockTunHandle.o ClientSockTunHandle.o ServerSockTunHandle.o AddrInfo.o ThreadManager.o Thread.o Callback.o Mutex.o MutexVar.o ConditionVar.o FileServerAuthenticator.o make[1]: Leaving directory `/home/bardwu/bard/httptunnel/src/libhttptun' echo 'libdirs \n' libdirs echo 'aaaaaaa \n' aaaaaaa g++ -c -Wall -DVERSION=\"1.3.2\" -DSTRNAME=\"HTTPTunnel\" -g -I. -I./libhttptun main.cc echo 'bbbbbb \n' bbbbbb echo '222222\n' 222222 g++ -o httptunnel main.o libhttptun/libhttptun.a -lpthread -lsocket -lnsl -lrt echo '333333\n' 333333
其实这个编译的过程很简单,就是把src目录下的libhttpun下的c文件编译打包,最后和src 下的main.o编译连接成
httptunnel这个可执行文件,从这句可以看出。
g++ -o httptunnel main.o libhttptun/libhttptun.a -lpthread -lsocket -lnsl -lrt
开始,我没找到libhttpun目录下也有makefile,以为是makefile智能规则推演出来,进行打包了,原来不是。
不过我不明白的是,为什么不用shell命令组合一下把libhttpun下所有的.o文件,打个包不就行了吗,这样以后每次添加
源程序,就不需要手工添加条目了,不然这样也太烦人了,呵呵,有机会试试。
如果您不太懂makefile ,请参阅:http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/index.html#content
相关推荐
makefile 实例分析 Makefile 语法分析 第一部分 VERSION = 2# 给变量VERSION赋值 PATCHLEVEL = 6# 给变量PATCHLEVEL赋值 SUBLEVEL = 22# 给变量SUBLEVEL赋值 EXTRAVERSION = .6# 给变量EXTRAVERSION赋值 NAME = ...
Makefile入门与提高,该文档详细分析了makefile文件的语法,并提供大量的实例
实例源代码 第1章:基本对话框; 第2章:布局管理; 第3章:对话框进阶; 第4章:QMainWindow; 第5章:图形与图画;... Makefile文件(Makefile、Makefile.Release) 可执行文件 ui文件(如需要)
源码中提供的两个Makefile文件,其中Makefile在Linux环境下使用,Makefile.Release为Windows环境下使用的Release版本,也可利用.pro文件自行生成Makefile文件。 有关本书的意见反馈和咨询可发送电子邮件至:cj@...
shell编程实例分析。 linux应用程序设计基础-GCC编译器。 linux应用程序设计基础-GDB调试器。 linux应用程序设计基础-Makefile。 linux文件编程基础-系统调用。 linux文件编程实例分析-系统调用。 linux文件编程基础...
引言 本书说明Unix系统的程序设计界面—系统调用界面和标准C提供的很多函数。这些对编写在Unix系统中运行的程序是非常有帮助...该手册没有给出实例,也不说明这些界面和函数设计的合理性,而这些则正是本书所要弥补的。
arp(地址解析协议)实例示范, 含发送和接收,在linux下跑通,带makefile,可用来学习理解arp协议
3.6.3 Linux下字符型设备驱动程序实例分析 习题 第4章 MiniGUI应用程序设计 4.1 嵌入式GUI概述 4.2 常用嵌入式GUI介绍 4.3 MiniGUI概述 4.4 MiniGUI的编译和安装 4.5 MiniGUI程序框架 4.6 MiniGUI编程基础 ...
3.1.2 应用实例分析 3.2 强指针和弱指针 3.2.1 强指针的实现原理分析 3.2.2 弱指针的实现原理分析 3.2.3 应用实例分析 第2篇 Android专用驱动系统 第4章 Logger日志系统 4.1 Logger日志格式 4.2 ...
3.1.2 应用实例分析 3.2 强指针和弱指针 3.2.1 强指针的实现原理分析 3.2.2 弱指针的实现原理分析 3.2.3 应用实例分析 第2篇 Android专用驱动系统 第4章 Logger日志系统 4.1 Logger日志格式 4.2 Logger日志...
3.3.2 Makefile实例 50 3.3.3 注释 50 3.3.4 宏 50 3.3.5 描述块:目标、依赖项和命令 53 3.3.6 makefile预处理 55 3.3.7 在Platform SDK的基础上使用nmake 56 3.4 使用WinDbg调试 57 3.4.1 安装...
3.3.2 Makefile实例 50 3.3.3 注释 50 3.3.4 宏 50 3.3.5 描述块:目标、依赖项和命令 53 3.3.6 makefile预处理 55 3.3.7 在Platform SDK的基础上使用nmake 56 3.4 使用WinDbg调试 57 3.4.1 安装...
4.7.3 OSS驱动分析94 4.7.4 OSS用户空间编程95 实验4.7 Linux音频OSS驱动实验95 综合实验三五子棋游戏的实现97 第5章 嵌入式Linux开源软件移植与应用101 5.1 嵌入式WebServer GoAhead的移植与应用101 ...
4. 交叉编译实例分析 第八讲 Windows平台工具使用 1. SecureCRT的安装使用 2. Notepad++的使用 3. ADS集成开发环境的安装 4. HJTAG工具的使用 5. USB驱动的安装 6. 使用USB下载程序 第四部分 嵌入式硬件 第九讲 ARM9...
分析与实战是iOS应用逆向工程方面的权威著作,三位作者都是iOS领域内的专家,拥有扎实的理论知识和丰富的实践经验。本书内容以工具+代码的形式全面、系统地展开知识点,由浅入深,图文并茂地带着读者一步步探索常规...
介绍交叉编译工具的选项以及基本的MakeFile语法。 ARM汇编程序设计基础 GPIO接口 NAND Flash控制器、存储控制器和内存管理单元MMU 中断体系结构 系统时钟和定时器 通用异步收发器UART I2C...
2.2.3 vi的使用实例分析 40 2.3 嵌入式linux编译器gcc的使用 41 2.3.1 gcc概述 41 2.3.2 gcc编译流程分析 42 2.3.3 gcc警告提示 45 2.3.4 gcc使用库函数 47 2.3.5 gcc代码优化 49 2.4 嵌入式...