胡焦24

You got a dream, you gotta to protect it!

站内搜索

Trojan-Qt5客户端的构建

发布日期:2026-03-04 |文章分类: 默认分类

这是之前研究代理工具时候,写的一篇笔记,可能已经过时

依赖编译

按照 Trojan-Qt5 的依赖关系,先下载依赖库 Trojan-Qt5-Libraries

也可以通过 git submodule 查看 Trojan-Qt5 原工程依赖的仓库,除了 qhttpserver 外还有 7 个子项目

需要本地编译的,主要是下面四个依赖库,这里全都修改为静态链接的方式,如果不编译的话,依赖库 Trojan-Qt5-Libraries 中的也可以正常使用

qhttpserver

修改其中的 src/src.pro 工程文件,将原来的动态库方式修改为静态库方式

CONFIG += static debug_and_release

使用本地 QtCreator 打开,在构建配置中设置 debug、release,然后进行构建

构建的时候可能会有部分失败信息,错误信息可以忽略,只要构建目录下的 lib 下文件被编译出来就可以了

qntp

修改其中的 qntp.pro 工程文件,增加 CONFIG 配置,将原来的动态库方式修改为静态库方式

使用本地 QtCreator 打开,在构建配置中设置 debug、release,然后进行构建

CONFIG += static

yaml-cpp

使用以下命令生成 vs 的解决方案,然后用 vs2022 打开,在里面选择 debug/release 进行编译

编译结果在 build/debug 和 build/release 目录下

mkdir build
cd build 
cmake .. -DYAML_BUILD_SHARED_LIBS=off -G "Visual Studio 17 2022" -A Win32

shadowsocksr-uvw

编辑 CMakeLists.txt 文件,注释掉其中的 include 指令

if(WIN32)
    if(NOT DEFINED CMAKE_TOOLCHAIN_FILE)
        if(CMAKE_CL_64)
            include(${CMAKE_SOURCE_DIR}/libs/x64-windows/scripts/buildsystems/vcpkg.cmake)
        else()
            #include(${CMAKE_SOURCE_DIR}/libs/x86-windows/scripts/buildsystems/vcpkg.cmake)
        endif()
    endif()
endif()

在生成解决方案的时候,需要使用到 openssl,需要先配置本地的环境变量为如下值

OPENSSL_CRYPTO_LIBRARY = C:\TQLibraries\openssl\lib
OPENSSL_INCLUDE_DIR = C:\TQLibraries\openssl\include
OPENSSL_ROOT_DIR = C:\TQLibraries\openssl

执行以下构建命令,生成 vs 的解决方案,然后使用 vs2022 打开,在里面选择编译 debug/release

编译的结果分别在各个子目录中,可以通过 everything 进行统一过滤出来

cmake .. -DSSR_UVW_WITH_QT=1 -DCMAKE_SYSTEM_VERSION="10.0.20348.0" -G "Visual Studio 17 2022" -A Win32

Trojan-Qt5-Core 编译

core 组件涉及比较多个仓库代码,编译起来比较麻烦

先下载 trojan-go 仓库的代码 https://github.com/p4gefau1t/trojan-go.git,并将本地代码 reset 到 tag: v0.5.1 ,trojan-go 还依赖了 v2ray-core

修改 trojan-go 仓库的 go.mod 文件的如下配置使用本地仓库,然后执行 go mod tidy ,这时候按 README 方式编译 trojan-go 应该是可以正常通过的

		v2ray.com/core v0.0.0+incompatible
)

replace v2ray.com/core => D:\develop\Trojan\v2ray-core

对于 Trojan-Qt5-Core 仓库的代码,需要作一定的修改,详细参考仓库的修改记录

注释掉 run_tun2socks、startShadowsocksGo、stopShadowsocksGo、testV2rayGo、startV2rayGo、stopV2rayGo

并增加一个函数(暂为空)的定义并导出,以及移除 import 对应的包(通常会自动移除)

//export setAssetPath
func setAssetPath(configFile *C.char) {
	//to fix
}

使用以下命令进行编译

go build --tags "api client router" -buildmode=c-shared -o trojan-qt5-core.dll -a main.go

编译出来 dll 动态库后,运行仓库下的 process.bat 文件生成 c 头文件以及其对应的 lib 文件,以便用于编译客户端工程

在这里生成的 c 头文件,需要使用 msvc.py 做一些清理处理,以便可以客户端工程可以正常编译

Trojan-Qt5 客户端

在代码主目录下,执行以下构建命令,如需要编译 debug 版本的,修改其中的 release 配置

为了避免命令无法识别,启动一个 vs 环境的 cmd 窗口 C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars32.bat

构建完毕后,编译结果在 build/debug 或 build/release 目录下

mkdir build
cd build
qmake CONFIG+=release ..
nmake