依赖项

TEN 框架利用了多个第三方库。有些专门用于测试,而另一些则集成到 TEN 运行平台中。以下是对这些库的描述,以及在 TEN 框架中使用它们所需的任何必要修改。

Google gn

实例 ID

操作系统
架构
实例 ID

Linux

x64

BzX0zkfwFeUn9MaDVqm6FugmTIy-hFpgNUx43O1fN00C

Linux

arm64

rT_12w1Iv6ug8CJ4j0VQekA0qTDq6CwoAqGWasIKFcEC

Mac

x64

B31qpTXmBZpBHIdUtEFogC24WDCQ9W7qAS0d1eSxoZgC

Mac

arm64

5dcmC12_T9JLydmhjTjySyTC7FiYd75j-tyHVokWaFEC

Win

x64

1QlqF0FPVt82ba5f48HxHpv5xPqOmyaThoR3TicuJ8QC

直接从 Google GN 网页 下载。

Google ninja

版本:1.12.1

直接从 Ninja 发布页面 下载。

Jansson

版本:2.14

MIT 许可证

这在 TEN 框架核心中用于解析和生成 JSON 数据。有关详细信息,请参阅 third_party/jansson

libuv

版本:1.49.2

MIT 许可证

这是 TEN 运行时中使用的一个事件循环库。有关详细信息,请参阅 third_party/libuv

msgpack-c

版本:6.1.0

Boost 软件许可证,版本 1.0

用于 C 的 MessagePack 库。有关详细信息,请参阅 third_party/msgpack

libwebsockets

版本:4.3.2

MIT 许可证

规范 libwebsockets.org 网络库。有关详细信息,请参阅 third_party/libwebsockets

--- /home/wei/MyData/Temp/libwebsockets-4.3.2/CMakeLists.txt
+++ libwebsockets/CMakeLists.txt
@@ -851,6 +851,7 @@
  add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
  # Fail the build if any warnings
  add_compile_options(/W3 /WX)
+ add_compile_options(/Zc:preprocessor /wd4819)
  # Unbreak MSVC broken preprocessor __VA_ARGS__ behaviour
  if (MSVC_VERSION GREATER 1925)
   add_compile_options(/Zc:preprocessor /wd5105)

应用以下补丁。

diff --git a/third_party/libwebsockets/cmake/lws_config.h.in b/third_party/libwebsockets/cmake/lws_config.h.in
index f3f4a9d79..e8d36c3ae 100644
--- a/third_party/libwebsockets/cmake/lws_config.h.in
+++ b/third_party/libwebsockets/cmake/lws_config.h.in
@@ -238,3 +238,9 @@
 #cmakedefine LWS_WITH_PLUGINS_API
 #cmakedefine LWS_HAVE_RTA_PREF

+// NOTE (Liu): The libwebsockets library will use external variables from mbedtls
+// if 'LWS_WITH_MBEDTLS' is enabled. On Windows, variable declarations in the header
+// file must start with '__declspec(dllimport)', otherwise, the
+// symbols cannot be accessed.
+// Refer to third_party/mbedtls/include/mbedtls/export.h.
+#define USING_SHARED_MBEDTLS
diff --git a/third_party/libwebsockets/lib/tls/mbedtls/wrapper/platform/ssl_pm.c b/third_party/libwebsockets/lib/tls/mbedtls/wrapper/platform/ssl_pm.c
index e8a0cb2d4..84a164e90 100755
--- a/third_party/libwebsockets/lib/tls/mbedtls/wrapper/platform/ssl_pm.c
+++ b/third_party/libwebsockets/lib/tls/mbedtls/wrapper/platform/ssl_pm.c
@@ -183,7 +183,12 @@ int ssl_pm_new(SSL *ssl)
         mbedtls_ssl_conf_min_version(&ssl_pm->conf, MBEDTLS_SSL_MAJOR_VERSION_3, version);
     } else {
         mbedtls_ssl_conf_max_version(&ssl_pm->conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3);
-    mbedtls_ssl_conf_min_version(&ssl_pm->conf, MBEDTLS_SSL_MAJOR_VERSION_3, 1);
+
+    // NOTE: mbedtls added 'ssl_conf_version_check()' since v3.1.0, and
+    // mbedtls only enables TLS 1.2 by default. So the 'min_tls_version' and
+    // 'max_tls_version' must be '0x303', or 'mbedtls_ssl_setup' will
+    // fail.
+    mbedtls_ssl_conf_min_version(&ssl_pm->conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3);
     }

     mbedtls_ssl_conf_rng(&ssl_pm->conf, mbedtls_ctr_drbg_random, &ssl_pm->ctr_drbg);

修复在 Windows 上链接 mbedtls

如果 CMake 版本高于 3.24,请应用以下补丁,因为 find_package 自 3.24 起支持 GLOBAL 关键字。

diff --git a/third_party/libwebsockets/lib/tls/mbedtls/CMakeLists.txt b/third_party/libwebsockets/lib/tls/mbedtls/CMakeLists.txt
index e34151724..79b15089d 100644
--- a/third_party/libwebsockets/lib/tls/mbedtls/CMakeLists.txt
+++ b/third_party/libwebsockets/lib/tls/mbedtls/CMakeLists.txt
-        find_library(MBEDTLS_LIBRARY mbedtls)
-        find_library(MBEDX509_LIBRARY mbedx509)
-        find_library(MBEDCRYPTO_LIBRARY mbedcrypto)
+        # find_library(MBEDTLS_LIBRARY mbedtls)
+        # find_library(MBEDX509_LIBRARY mbedx509)
+        # find_library(MBEDCRYPTO_LIBRARY mbedcrypto)
+
+        # set(LWS_MBEDTLS_LIBRARIES "${MBEDTLS_LIBRARY}" "${MBEDX509_LIBRARY}" "${MBEDCRYPTO_LIBRARY}")
+
+        # Set the custom search path.
+        set(MBEDTLS_DIR "${MBEDTLS_BUILD_PATH}/cmake")
+
+        // NOTE (Liu): We should use 'find_package' rather than 'find_library'
+        // to search for the mbedtls libraries. 'find_library' only finds a
+        // library, shared or static, without any settings from the external
+        // library.

-        set(LWS_MBEDTLS_LIBRARIES "${MBEDTLS_LIBRARY}" "${MBEDX509_LIBRARY}" "${MBEDCRYPTO_LIBRARY}")
+        // The 'lib/tls/CMakeLists.txt' depends on the mbedtls libraries, so we set the scope to 'GLOBAL' here.
+        find_package(MbedTLS GLOBAL)
+        set(LWS_MBEDTLS_LIBRARIES MbedTLS::mbedcrypto MbedTLS::mbedx509 MbedTLS::mbedtls)
diff --git a/third_party/libwebsockets/BUILD.gn b/third_party/libwebsockets/BUILD.gn
index 4c89c2e2e..e6d641b9c 100644
--- a/third_party/libwebsockets/BUILD.gn
+++ b/third_party/libwebsockets/BUILD.gn
@@ -84,6 +84,10 @@ cmake_project("websockets") {
   }

   options += [
+  // The libwebsockets will use the 'MBEDTLS_BUILD_PATH' variable to set the
+  // search path of 'find_package'.
+  "MBEDTLS_BUILD_PATH=" + rebase_path("$root_gen_dir/cmake/mbedtls"),
+

并删除 third_party/libwebsockets/cmake/lws_config.h.in 中的 #define USING_SHARED_MBEDTLS

curl

版本:8.1.2

类 MIT 许可证

一种使用 URL 语法传输数据的命令行工具和库,支持 DICT、FILE、FTP、FTPS、GOPHER、GOPHERS、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、MQTT、POP3、POP3S、RTMP、RTMPS、RTSP、SCP、SFTP、SMB、SMBS、SMTP、SMTPS、TELNET 和 TFTP。libcurl 提供了无数强大的功能。

有关详细信息,请参阅 third_party/curl

curl 的补丁

修补 lib/CMakeLists.txt,将共享库名称从 _imp.lib 更改为 .lib

if(WIN32)
  if(BUILD_SHARED_LIBS)
    if(MSVC)
      // Add "_imp" as a suffix before the extension to avoid conflicting with
      // the statically linked "libcurl.lib"
      //set_target_properties(${LIB_NAME} PROPERTIES IMPORT_SUFFIX "_imp.lib")
      set_target_properties(${LIB_NAME} PROPERTIES IMPORT_SUFFIX ".lib")
    endif()
  endif()
endif()

lib/ws.h 中导出 Curl_ws_done,因为需要调用此函数以防止内存泄漏。

CURL_EXTERN void Curl_ws_done(struct Curl_easy *data);
// ^^^^^^^^

clingo

版本:5.6.2

MIT 许可证

一种用于逻辑程序的接地器和求解器。

有关详细信息,请参阅 third_party/clingo

FFmpeg

版本:6.0

GPL 或 LGPL 许可证

FFmpeg 代码库主要采用 LGPL 许可,可选组件采用 GPL 许可。有关详细信息,请参阅 LICENSE 文件。

用于 ffmpeg 扩展,主要用于测试目的。有关详细信息,请参阅 third_party/ffmpeg

libbacktrace

版本:1.0

BSD 许可证

一个可以链接到 C/C++ 程序中以生成符号回溯的 C 库。

⚠️ 注意: 我们已经对 libbacktrace 进行了重大修改,以符合 TEN 框架的命名约定和文件夹结构。有关详细信息,请参阅 core/src/ten_utils/backtrace

uthash

版本:2.3.0

BSD 许可证

用于哈希表等的 C 宏。

⚠️ 注意: 我们已经对 uthash 进行了重大修改,以符合 TEN 框架的命名约定和文件夹结构。有关详细信息,请参阅文件头中提到 uthashcore/include/ten_utils/container 下的文件。

uuid4

MIT 许可证 WTFPLv2 许可证

C 中的 UUID v4 生成。

⚠️ 注意: 我们已经对 uuid4 进行了重大修改,以符合 TEN 框架的命名约定和文件夹结构。有关详细信息,请参阅 core/src/ten_utils/lib/sys/general/uuid.c

zf_log

MIT 许可证

用于 C/ObjC/C++ 的核心日志库。

⚠️ 注意: 我们已经对 zf_log 进行了重大修改,以符合 TEN 框架的命名约定和文件夹结构。有关详细信息,请参阅 core/src/ten_utils/log

Last updated

Was this helpful?