如何在Linux下成功安装和配置
1。首先从网络上找到 socks5-v1。0r11。tar。gz ,还有一个是补丁包,那个包没有下,所以有什么用我不知道。
2。讲socks5-v1。0r11。tar。gz解压倒文件夹,利用下面这个命令,其实这几步网络上的资源很丰富,但我这里力求详细和全面。
解压上述压缩包,执行tar xvzf socks5-v1。0r11。tar。gz
解压缩后在目录下产生一个 socks5-v。1。0r11的目录。
3。进入该目录,运行。/configure 。 这一步我顺利通过。
4。接着运行make,在编译的过程中遇到了问题,让我花了好长时间,在编译clients/ftp/ftp。c文件时,...全部
1。首先从网络上找到 socks5-v1。0r11。tar。gz ,还有一个是补丁包,那个包没有下,所以有什么用我不知道。
2。讲socks5-v1。0r11。tar。gz解压倒文件夹,利用下面这个命令,其实这几步网络上的资源很丰富,但我这里力求详细和全面。
解压上述压缩包,执行tar xvzf socks5-v1。0r11。tar。gz
解压缩后在目录下产生一个 socks5-v。1。0r11的目录。
3。进入该目录,运行。/configure 。
这一步我顺利通过。
4。接着运行make,在编译的过程中遇到了问题,让我花了好长时间,在编译clients/ftp/ftp。c文件时,在command函数处出现问题,提示说arargs方法在gcc4。
1。2中已经过时,不能用了。但是网上我没有找到可用的解决方法。所以只有自己解决,具体问题是varargs。h和stdarg。h的不兼容,就是说在处理不确定个数的参数的时候方法不同,现在的gcc已经用了stdarg方法,已经不用ararg的方法。
两者的差异在于,va_start()函数的参数个数不同,格式也不一样,下面我同时列给出我修改的代码和原来的代码:
原来的代码:
#include 。。。。int command(va_alist) va_dcl {va_list ap;char *fmt;int r;Sig_t oldintr;abrtflag = 0;if (debug) {printf("---> ");va_start(ap);fmt = va_arg(ap, char *);if (strncmp("PASS ", fmt, 5) == 0)printf("PASS XXXX");else vfprintf(stdout, fmt, ap);va_end(ap);printf("\n");fflush(stdout);}if (cout == NULL) {perror ("No control connection for command");code = -1;return (0);}oldintr = Signal(SIGINT, cmdabort);va_start(ap);fmt = va_arg(ap, char *);vfprintf(cout, fmt, ap);va_end(ap);fflush(cout);cpend = 1;r = getreply(!strcmp(fmt, "QUIT"));Signal(SIGINT, oldintr);if (abrtflag) {kill(getpid(),SIGINT);}return(r);}
修改过的代码: //#include #include 。
。。。/*VARARGS*/int command(const char *args,。。。) {va_list ap;char *fmt;int r;Sig_t oldintr;abrtflag = 0;if (cout == NULL) {perror ("No control connection for command");code = -1;return (0);}oldintr = Signal(SIGINT, cmdabort);fmt = args;va_start(ap,args);// fmt = va_arg(ap, char *);vfprintf(cout, fmt, ap);va_end(ap);fflush(cout);cpend = 1;r = getreply(!strcmp(fmt, "QUIT"));Signal(SIGINT, oldintr);if (abrtflag) {kill(getpid(),SIGINT);}return(r);}
这个函数修改过以后,后面还有一个文件clients/telnet/commands。
c中的call()函数也要做类是的修改。
这里我推介大家看看有关va_start(),va_end的文章;想更深层的可以看看标准c语言中的va函数的用法。收起