[OP](trojan-plus) fatal error: gsl/gsl: No such file or directory

幻想 2023年12月24日 50 0

报错

[1/24] Building CXX object CMakeFiles/trojan.dir/src/core/config.cpp.o
FAILED: CMakeFiles/trojan.dir/src/core/config.cpp.o
/opt/lede/staging_dir/toolchain-x86_64_gcc-12.3.0_musl/bin/x86_64-openwrt-linux-musl-g++ -DBADVPN_BREACTOR_BADVPN=1 -DBADVPN_LINUX=1 -DBADVPN_LITTLE_ENDIAN=1 -DBADVPN_THREADWORK_USE_PTHREAD=1 -DBADVPN_THREAD_SAFE=1 -DBADVPN_USE_EPOLL=1 -DBADVPN_USE_SIGNALFD=1 -DBOOST_BIND_GLOBAL_PLACEHOLDERS=1 -DDEFAULT_CONFIG=\"/etc/trojan/config.json\" -DENABLE_NAT -DENABLE_REUSE_PORT -DENABLE_SSL_KEYLOG -DENABLE_TLS13_CIPHERSUITES -D_GNU_SOURCE=1 -I/opt/lede/build_dir/target-x86_64_musl/trojan-plus-10.0.3/src -I/opt/lede/build_dir/target-x86_64_musl/trojan-plus-10.0.3/NAMES -I/opt/lede/build_dir/target-x86_64_musl/trojan-plus-10.0.3/external/GSL/include -pipe -fno-caller-saves -fno-plt -fhonour-copts -fmacro-prefix-map=/opt/lede/build_dir/target-x86_64_musl/trojan-plus-10.0.3=trojan-plus-10.0.3 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro -Wall -Wextra -DPIC -fpic -flto -std=c++11 -O3 -ffunction-sections -fdata-sections -DNDEBUG -s   -Wall -Wextra -std=gnu++17 -MD -MT CMakeFiles/trojan.dir/src/core/config.cpp.o -MF CMakeFiles/trojan.dir/src/core/config.cpp.o.d -o CMakeFiles/trojan.dir/src/core/config.cpp.o -c /opt/lede/build_dir/target-x86_64_musl/trojan-plus-10.0.3/src/core/config.cpp
/opt/lede/build_dir/target-x86_64_musl/trojan-plus-10.0.3/src/core/config.cpp:26:10: fatal error: gsl/gsl: No such file or directory
   26 | #include <gsl/gsl>
      |          ^~~~~~~~~
compilation terminated.
ninja: build stopped: subcommand failed.
make[3]: *** [Makefile:72: /opt/lede/build_dir/target-x86_64_musl/trojan-plus-10.0.3/.built] Error 1
make[3]: Leaving directory '/opt/lede/feeds/passwall_packages/trojan-plus'
time: package/feeds/passwall_packages/trojan-plus/compile#0.72#0.32#11.53
    ERROR: package/feeds/passwall_packages/trojan-plus failed to build.
make[2]: *** [package/Makefile:116: package/feeds/passwall_packages/trojan-plus/compile] Error 1
make[2]: Leaving directory '/opt/lede'
make[1]: *** [package/Makefile:110: /opt/lede/staging_dir/target-x86_64_musl/stamp/.package_compile] Error 2
make[1]: Leaving directory '/opt/lede'
make: *** [/opt/lede/include/toplevel.mk:231: world] Error 2

原因

编译trojan-plus时,会下载gsl,但网络原因,会导致gsl无法下载或下载不全,导致会编译失败。

解决

方案一

删除文件,让其重新下载。

  1. 删除已编译的build_dir/target-x86_64_musl/trojan-plus-10.0.3路径
  2. 重新编译

方案二

直接将文件下载进来。

  1. 进入build_dir/target-x86_64_musl/trojan-plus-10.0.3/external路径
  2. 下载文件
git clone --branch v4.0.0 https://github.com/Microsoft/GSL
  1. 由于Microsoft/GSL最新版是基于C++14的,因此trojan-plus的Makefile需要改一下
# CXX standard
TARGET_CXXFLAGS += -std=c++11
TARGET_CXXFLAGS := $(filter-out -O%,$(TARGET_CXXFLAGS)) -O3

改为

# CXX standard
TARGET_CXXFLAGS += -std=c++14
TARGET_CXXFLAGS := $(filter-out -O%,$(TARGET_CXXFLAGS)) -O3
  1. 如果不想改3,可跳过步骤2、3,直接用指定版本
git clone --branch v3.1.0 https://github.com/Microsoft/GSL
Last Updated: 2024/08/12 15:25:55
linux基础_vi/vim 记一次Cookie的SameSite属性引发的惨案