xsocks 64位平台下编译问题小记

Posted 范晨鹏的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xsocks 64位平台下编译问题小记相关的知识,希望对你有一定的参考价值。

1、src/common/public.h

     uint32_t lpParameter 改为 void* lpParameter;

2、SocksMgr.cpp

DWORD WINAPI CSocksMgr::ForwardProc(void* lpParameter) 
{

//    int s = int (lpParameter);
...
}

编译不过去。因为在 64位平台下,void*向 int转换会丢失精度。

DWORD WINAPI CSocksMgr::ForwardProc(void* lpParameter)
{

    intptr_t s = intptr_t(lpParameter);
        ...
}

作者在这里做强制转换的原因是:传递的参数  lpParameter,最原始由线程创建时当参数传入,受接口限制,只能传入指针类型。实际这个参数是一个socket句柄。是个 int。

还有个将 this指针强制转换为 uint32_t的。

bool CSocksMgr::Begin( LPCSTR ip, int port )
{
                ......
        proxy->lpParameter = this;
                ......
}

 

以上是关于xsocks 64位平台下编译问题小记的主要内容,如果未能解决你的问题,请参考以下文章

ARM 64指令小记

ARM 64指令小记

Windows平台编译openssl-0.9.8k库(32位64位)

gcc:在 32 位平台上编译 64 位二进制文​​件

强制 gcc 在 64 位平台上编译 32 位程序

32位平台代码向64位平台移植