- 浏览: 152916 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
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
相关推荐
#### 实例分析 在提供的示例代码中,我们有一个简单的C语言项目结构,包括`main.c`、`mytool1.c`、`mytool1.h`、`mytool2.c`、`mytool2.h`等文件,以及一个名为`Makefile`的构建脚本。下面将逐一分析这些文件,并...
6. 静态检查:应用静态代码分析工具,如`golint`、`staticcheck`等,确保代码质量。 7. 打包和发布:生成跨平台的可执行文件,或者打包为`tar.gz`或`zip`等格式。 一个基本的Go项目`Makefile`可能包含以下目标...
#### 四、Makefile实例分析 以下是一个简单的 Makefile 示例,展示了如何为一个包含 8 个 C 文件和 3 个头文件的工程编写 Makefile: ```makefile # 定义目标 all: program # 定义规则 program: main.o func1.o ...
它通过分析Makefile来确定哪些目标需要更新,并执行相应的命令。 2. **Makefile结构**:Makefile通常包含目标(target)、依赖项(dependency)和命令(command)。目标是需要构建或更新的文件,依赖项是目标文件所...
在Linux系统中,`Makefile`是一个非常重要的工具,它帮助开发者自动化编译、链接以及执行等构建过程。...通过实践和分析"实验8_2"和"实验8_1"中的`Makefile`,开发者能深入理解自动化构建流程,提高开发效率。
现在,让我们分析提供的文件列表:`func.c`, `main.c`, `func.h` 和 `Makefile`。假设 `func.c` 和 `main.c` 是 C 源代码文件,而 `func.h` 是头文件,`Makefile` 用于管理编译过程。一个基本的 `Makefile` 可能如下...
本文旨在深入解析Makefile的基础概念及其实现原理,并通过实例帮助读者更好地理解和应用Makefile。文章首先介绍了Makefile的基本概念——目标(target)与依赖(dependency),随后探讨了如何构建有效的Makefile规则,...
- **实例分析**:文中提到的文章采用了实例驱动的方式介绍makefile的编写技巧,从简单的示例入手逐步深入。 - **实例特点**:该文章与《Linux环境下的C编程指南》中关于makefile的章节相似,但通过具体实例使得概念...
以下是一个具体的Makefile实例分析,旨在帮助理解如何编写和使用Makefile。 ##### 示例代码结构 - `main.c`:主程序文件。 - `add_int.c`:整型加法实现文件。 - `add_float.c`:浮点型加法实现文件。 - `sub_int....
- **示例**:本书提供了多个实例来帮助读者理解Makefile的编写方法。 - **make的工作原理**:解释了make工具如何读取Makefile并根据其中的规则执行相应的命令。 - **变量使用**:介绍了如何在Makefile中定义和使用...
7. **实例分析** 一个简单的 `Makefile` 模板可能如下: ```make CC = gcc CFLAGS = -Wall -g OBJS = main.o func1.o func2.o all: myapp myapp: $(OBJS) $(CC) $(CFLAGS) -o $@ $^ %.o: %.c $(CC) $...
让我们看一个简单的Makefile实例,它定义了一个C语言项目的基本构建过程: ```makefile CC = gcc CFLAGS = -Wall OBJS = main.o util.o all: my_program my_program: $(OBJS) $(CC) $(CFLAGS) -o $@ $^ %.o: %....
《GNU Makefile 中文手册》是一本针对编程者和系统管理员的重要参考资料,它详细解析了如何使用GNU make...《GNU Makefile 中文手册》正是这样的指南,提供了详细的解释和实例,帮助读者深入理解并运用这一强大的工具。
《Linux GNU Makefile中文版手册》详尽地阐述了以上概念,并提供了丰富的实例和技巧,帮助开发者更好地理解和使用Makefile,提升软件构建的效率和质量。通过学习这份手册,你可以掌握Makefile的精髓,无论是在个人...
### 实例分析 在提供的 `makefile` 示例中,可能会包括如下内容: ```makefile CC = gcc CFLAGS = -Wall OBJS = main.o utils.o all: my_program my_program: $(OBJS) $(CC) $(CFLAGS) -o $@ $^ %.o: %.c $...
通过实例分析,读者可以快速掌握makefile的编写技巧,提高自动化构建的效率。 GNU Make Manual是GNU项目官方提供的make工具指南,它详尽地解释了GNU Make的工作原理和使用方法。手册中涵盖了make的命令行选项、规则...
在这个实例中,我们将深入理解 Makefile 的基本语法,特别是变量赋值和特殊变量的使用。 首先,我们看到几个变量的定义,如 `VERSION`、`PATCHLEVEL`、`SUBLEVEL` 和 `EXTRAVERSION`,它们被用来存储软件版本的相关...
3. **例化module**:在`module_tb.v`中,你需要实例化被测模块,连接初始化的信号到DUT的输入端,并将DUT的输出连接到观察变量,以便在仿真过程中检查其行为。 4. **波形输出函数$vcdpluson()`**:VCD(Value ...
`Makefile 结构分析.pdf`则可能专注于`Makefile`的结构设计,包括如何组织目标和规则,如何设置默认目标,以及如何使用多个`Makefile`协同工作。这份文档可能会讲解如何有效地管理大型项目中的多个源文件,以及如何...
总之,AVR.rar 文件提供了一个深入学习 AVR 单片机 C 语言编程和实践的好机会,通过对示例程序的分析和 makefile 的理解,开发者能够更有效地构建自己的嵌入式项目。同时,不断探索和实践是提升 AVR 开发技能的关键...