ubuntu16.04源码编译linphone库的过程

linphone源码下载链接:https://gitlab.linphone.org/BC/public/liblinphone
linphone 依赖 belcard
belcard 依赖 belr
belr 依赖 bctoolbox
bctoolbox编译安装 依赖 mbedtls Decaf BcUnit
mbedtls 依赖 libmbedcrypto3 libmbedtls12 libmbedx509-0 (这三个的软件包网址:https://launchpad.net/ubuntu/hirsute/amd64/libmbedx509-0/2.16.9-0.1ubuntu1)

源码编译decaf 网址:https://github.com/decaf-project/DECAF/blob/master/decaf/documents/Installation.md 已经编译完成,但是编译bctoolbox时,cmake提示找不到

编译BcUnit网址:https://blog.csdn.net/macmacip/article/details/106209984,这个网址是用./configure编译的;需要改成cmake 编译方式

编译BcToolbox https://github.com/BelledonneCommunications/bctoolbox(这是github的源码网址), 但是编译选项参考了以下网址:https://blog.csdn.net/macmacip/article/details/106209984,取消了decaf选项-DENABLE_DECAF=NO

编译 belr 源码网址: https://launchpad.net/ubuntu/+source/belr/4.4.13-2 遇到问题(CMake Error at src/CMakeLists.txt:56 (add_library):
add_library cannot create target “belr” because another target with the
same name already exists. The existing target is a static library created
in source directory
“/home/smart/second_version/myprogram/tool_program/linphone/linphone-sdk/belr-4.4.13/src”.
)
问题解决办法,在src目录下的CMakeLists.txt 将enable_static 中的add_library 的belr改成belr_static

编译belcard时出现 bctoolbox/tester.h 找不到的问题;解决办法:重新解压belcard源码,在cmake编译选项中增加-DCMAKE_PREFIX_PATH=/opt/bctoolbox,具体含义在belcard源码中的README文件中有解释

继续编译linphone 出现 依赖bellsip的问题(CMake Error at CMakeLists.txt:141 (find_package):
Could not find a package configuration file provided by “BelleSIP” with any
of the following names:

BelleSIPConfig.cmake
bellesip-config.cmake

Add the installation prefix of “BelleSIP” to CMAKE_PREFIX_PATH or set
“BelleSIP_DIR” to a directory containing one of the above files. If
“BelleSIP” provides a separate development package or SDK, be sure it has
been installed.)

编译安装 bell-sip 出现 belr相关的问题 使用-DCMAKE_PREFIX_PATH=/opt/belr 指明路径即可

继续编译linphone 随后出现问题( Could not find a package configuration file provided by “Mediastreamer2”
with any of the following names:

Mediastreamer2Config.cmake
mediastreamer2-config.cmake

Add the installation prefix of “Mediastreamer2” to CMAKE_PREFIX_PATH or set
“Mediastreamer2_DIR” to a directory containing one of the above files. If
“Mediastreamer2” provides a separate development package or SDK, be sure it
has been installed.)

编译安装mediastreamer2 下载网址是github:https://github.com/BelledonneCommunications/mediastreamer2
	出现依赖ortp的问题(CMake Error at CMakeLists.txt:181 (find_package):
	  Could not find a package configuration file provided by "ortp" with any of
	  the following names:

	    ortpConfig.cmake
	    ortp-config.cmake

	  Add the installation prefix of "ortp" to CMAKE_PREFIX_PATH or set
	  "ortp_DIR" to a directory containing one of the above files.  If "ortp"
	  provides a separate development package or SDK, be sure it has been
	  installed)

	编译安装ortp 参考网址:https://blog.csdn.net/macmacip/article/details/106209984 下载地址:https://gitlab.linphone.org/BC/public/ortp
	在public目录搜索ortp即可出现,但是页面没有显示

继续编译mediastreamer2 出现问题
	(CMake Error at /usr/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
	  Could NOT find SRTP (missing: SRTP_INCLUDE_DIRS SRTP_LIBRARIES
	  HAVE_SRTP_SRTP_H SRTP_VERSION) (Required is at least version "2")
	Call Stack (most recent call first):
	  /usr/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
	  cmake/FindSRTP.cmake:67 (find_package_handle_standard_args)
	  CMakeLists.txt:189 (find_package))
	编译安装srtp,下载地址:https://gitlab.linphone.org/BC/public 在目录中搜索srtp即可出现下载;直接./configure, make sudo make, install;即可

继续编译mediastreamer2 出现问题
	(CMake Error at CMakeLists.txt:197 (find_package):
	  Could not find a package configuration file provided by "bzrtp" with any of
	  the following names:

	    bzrtpConfig.cmake
	    bzrtp-config.cmake

	  Add the installation prefix of "bzrtp" to CMAKE_PREFIX_PATH or set
	  "bzrtp_DIR" to a directory containing one of the above files.  If "bzrtp"
	  provides a separate development package or SDK, be sure it has been
	  installed.
	)
	编译安装bzrtp,下载地址::https://gitlab.linphone.org/BC/public 在目录中搜索bzrtp即可出现下载;
	出现问题:
	(CMake Error at src/CMakeLists.txt:70 (add_library):
	  add_library cannot create target "bzrtp" because another target with the
	  same name already exists.  The existing target is a static library created
	  in source directory
	  "/home/smart/second_version/myprogram/tool_program/linphone/linphone-sdk/bzrtp-master/src".
	  See documentation for policy CMP0002 for more details.)
	解决问题:更改src中的CMakeLists.txt static add_library中bzrtp该车个bzrtp_static

继续编译mediastreamer2 出现问题
	(-- Could NOT find GLEW (missing: GLEW_INCLUDE_DIRS GLEW_LIBRARIES) 
	-- FindGLEW: could not find GLEW library.
	CMake Error at CMakeLists.txt:322 (message):
	  Glew is missing.  Mediastreamer2 need it
	)
	解决问题:直接sudo apt-get install libglew-dev 出现依赖问题
	([sudo] smart 的密码: 
	正在读取软件包列表... 完成
	正在分析软件包的依赖关系树       
	正在读取状态信息... 完成       
	您可能需要运行“apt-get -f install”来纠正下列错误:
	下列软件包有未满足的依赖关系:
	 libgcc-s1 : 依赖: gcc-11-base (= 11.1.0-1ubuntu1~21.04) 但无法安装它
	E: 有未能满足的依赖关系。请尝试不指明软件包的名字来运行“apt-get -f install”(也可以指定一个解决办法)。)
	源码安装:下载地址:https://github.com/nigels-com/glew 网页中的download项中有下载地址 按照 cmake的编译说明即可

继续编译mediastreamer2 出现问题
	(/home/smart/second_version/myprogram/tool_program/linphone/linphone-sdk/mediastreamer2-master/src/utils/jpgloader-turbojpeg.c: In function ‘jpeg2yuv_details’:
	/home/smart/second_version/myprogram/tool_program/linphone/linphone-sdk/mediastreamer2-master/src/utils/jpgloader-turbojpeg.c:116:12: error: implicit declaration of function 			‘tjGetErrorCode’ [-Werror=implicit-function-declaration]
	    ) <0 && tjGetErrorCode(turbojpegDec) != TJERR_WARNING) {
		    ^
	/home/smart/second_version/myprogram/tool_program/linphone/linphone-sdk/mediastreamer2-master/src/utils/jpgloader-turbojpeg.c:116:44: error: ‘TJERR_WARNING’ undeclared (first use in 			this function)
	    ) <0 && tjGetErrorCode(turbojpegDec) != TJERR_WARNING) {
	)

	解决问题:根据网上搜索需要安装libjpeg-turbo; 参考网址:https://segmentfault.com/a/1190000020976371; 最后用的是cmake . , make -j8, sudo make install 来编译安装的

继续编译mediastreamer2 出现问题
	(/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libturbojpeg.a(libturbojpeg_la-turbojpeg.o): 			relocation R_X86_64_32 against `.data' can not be used when making a shared object; recompile with -fPIC
	/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libturbojpeg.a: 无法添加符号: 错误的值
	collect2: error: ld returned 1 exit status
	src/CMakeFiles/mediastreamer.dir/build.make:2079: recipe for target 'src/libmediastreamer.so.11' failed
	make[2]: *** [src/libmediastreamer.so.11] Error 1
	CMakeFiles/Makefile2:323: recipe for target 'src/CMakeFiles/mediastreamer.dir/all' failed
	make[1]: *** [src/CMakeFiles/mediastreamer.dir/all] Error 2
	Makefile:135: recipe for target 'all' failed
	make: *** [all] Error 2
	)

	解决问题:根据recompile with -fPIC, 解决问题网址:https://blog.csdn.net/fb_941219/article/details/103436072;
	在CMakeLists.txt中添加add_compile_options(-fPIC)

继续编译mediastreamer2 出现问题 提示找不到 bctoolbox/tester.h
	解决问题: 重新解压源码, 在编译选项中 cmake . -DCMAKE_PREFIX_PATH=/opt/bctoolbox

继续编译linphone遇到问题:
CMake Error at /usr/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find Soci (missing: SOCI_INCLUDE_DIRS SOCI_LIBRARIES)
Call Stack (most recent call first):
/usr/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
cmake/FindSoci.cmake:88 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
CMakeLists.txt:164 (find_package)

编译安装是soci, 下载地址:https://gitlab.linphone.org/BC/public/, 搜索soci, 编译步骤cmkae. , make , sudo make install

继续编译linphone遇到问题:
CMake Error at CMakeLists.txt:205 (find_package):
Could not find a package configuration file provided by “lime” with any of
the following names:

limeConfig.cmake
lime-config.cmake

Add the installation prefix of “lime” to CMAKE_PREFIX_PATH or set
“lime_DIR” to a directory containing one of the above files. If “lime”
provides a separate development package or SDK, be sure it has been
installed.

编译安装lime, 下载地址https://github.com/BelledonneCommunications/lime
"cmake ." 步骤之后,遇到问题:

	-- Setting install rpath to /usr/local/lib
-- Soci found: Looking for plugins
--     * Plugin mysql not found.
--     * Plugin sqlite3 not found.
-- Support Curve 25519
-- Support Curve 448
-- Configuring done
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
SOCI_sqlite3_PLUGIN (ADVANCED)
    linked by target "lime_tester" in directory /home/smart/second_version/myprogram/tool_program/linphone/linphone-sdk/lime-master/tester

-- Generating done
CMake Generate step failed.  Build files cannot be regenerated correctly.

	编译安装sqlite3 现在地址:https://gitlab.linphone.org/BC/public?filter=sqlite3;完成

还是会出现SOCI_sqlite3_PLUGIN (ADVANCED)的问题。那就安装完sqlite3之后,重新编译安装soci,
问题解决,不再出现SOCI_sqlite3_PLUGIN (ADVANCED)的问题;问题提示也很明显了,SOCI缺少sqlite3插件

make之后出现问题
/usr/bin/ld: /usr/local/lib/libsoci_core.a(error.cpp.o): relocation R_X86_64_32 against `_ZTVN4soci10soci_errorE' can not be 		used when making a shared object; recompile with -fPIC
/usr/local/lib/libsoci_core.a: 无法添加符号: 错误的值
collect2: error: ld returned 1 exit status
src/CMakeFiles/lime.dir/build.make:210: recipe for target 'src/liblime.so.0' failed
make[2]: *** [src/liblime.so.0] Error 1
CMakeFiles/Makefile2:161: recipe for target 'src/CMakeFiles/lime.dir/all' failed
make[1]: *** [src/CMakeFiles/lime.dir/all] Error 2

	尝试在CmakeLists.txt中添加add_compile_options(-fPIC)选项,并重新编译,问题依旧。
	对soci的CMakeLists.txt添加add_compile_options(-fPIC)选项,并激活-DWITH_MYSQL=ON -DWITH_SQLITE3=ON 重新编译
重新编译lime之后不再出现R_X86_64_32的问题了,但是出现以下问题:
找不到bctoolbox/tester.h
	解决问题:在cmake之后添加选项-DCMAKE_PREFIX_PATH=/opt/bctoolbox

重新编译lime之后出现以下问题:

/usr/bin/ld: warning: libbelr.so.1, needed by /opt/bellesip/lib/libbellesip.so.1, not found (try using -rpath or -rpath-link)
/opt/bellesip/lib/libbellesip.so.1:对‘belr::tolower(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)’未定义的引用
/opt/bellesip/lib/libbellesip.so.1:对‘belr::Grammar::getRule(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)’未定义的引用
/opt/bellesip/lib/libbellesip.so.1:对‘belr::Grammar::findRule(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)’未定义的引用
/opt/bellesip/lib/libbellesip.so.1:对‘belr::Recognizer::feed(belr::ParserContextBase&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long)’未定义的引用
/opt/bellesip/lib/libbellesip.so.1:对‘belr::Grammar::isComplete() const’未定义的引用
/opt/bellesip/lib/libbellesip.so.1:对‘belr::fatal(char const*)’未定义的引用
/opt/bellesip/lib/libbellesip.so.1:对‘belr::GrammarLoader::load(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)’未定义的引用
/opt/bellesip/lib/libbellesip.so.1:对‘belr::GrammarLoader::get()’未定义的引用
collect2: error: ld returned 1 exit status
tester/CMakeFiles/lime_tester.dir/build.make:230: recipe for target 'tester/lime_tester' failed
make[2]: *** [tester/lime_tester] Error 1
CMakeFiles/Makefile2:187: recipe for target 'tester/CMakeFiles/lime_tester.dir/all' failed
make[1]: *** [tester/CMakeFiles/lime_tester.dir/all] Error 2
Makefile:145: recipe for target 'all' failed
make: *** [all] Error 2
解决问题:
很明显是找不到belr的库,尝试在cmake之后添加-DCMAKE_PREFIX_PATH=/opt/belr;问题依旧;那重新编译安装belr,保持默认安装路径,问题解决。

继续编译linphone:cmake之后
遇到以下问题:

-- Found PythonInterp: /usr/bin/python3 (found suitable version "3.5.2", minimum required is "3") 
CMake Error at cmake/Tools.cmake:31 (message):
  'pystache' python module not found
Call Stack (most recent call first):
  CMakeLists.txt:215 (check_python_module)
解决问题:
找不到pystache模块。"sudo apt-get update; sudo apt-get install python-pystache" 还是不行;重新安装sudo apt-get install python3-pystache
不再报pystache的问题

继续编译linphone:cmake之后
遇到以下问题:
CMake Error at /usr/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
Call Stack (most recent call first):
/usr/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake-3.20/Modules/FindDoxygen.cmake:644 (find_package_handle_standard_args)
coreapi/help/doc/doxygen/CMakeLists.txt:24 (find_package)
解决问题:
“sudo apt-get install doxygen”

继续编译linphone:
遇到以下问题:
CMake Error at src/CMakeLists.txt:626 (target_link_libraries):
Cannot specify link libraries for target “linphone” which is not built by
this project.
解决问题:
临时的解决方法是,注释掉626涉及到的target_link_libraries.后来将其中的linphone改成linphone-static

继续编译linphone:
出现头文件找不到的问题:缺少mediastreamer2和belcard的头件,但是通过打印mediastreamer2_include_dirs,目录显示mediastreamer2/opengl的路径,之前补充cmake . -DCMAKE_PREDFIX_PATH=XXX配置软件包的搜索目录,没有解决问题,还是指向opengl。然后在linphone的CMakeLists.txt中在251-270行内添加缺少的头文件目录。解决

继续编译linphone:
出现以下问题:
/home/smart/second_version/myprogram/tool_program/linphone/linphone-sdk/liblinphone-master/src/conference/handlers/remote-conference-event-handler.cpp:575:68: error: use of ‘content’ before deduction of ‘auto’
for (const auto &content : ContentManager::multipartToContentList(content)) {
尝试添加支持c++11,问题依旧。后将for循环更改为经典模式的写法。没有再出现了
//for (const auto &content : ContentManager::multipartToContentList(content)) {
//notifyReceived(content);
auto temp=content;
auto temp1=ContentManager::multipartToContentList(content);
for(const auto &temp : temp1)
{
notifyReceived(temp);
}

继续编译linphone:
出现以下问题:
/opt/belcard/lib/libbelcard.so.1:对‘belr::Recognizer::feed(std::shared_ptrbelr::ParserContextBase const&, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, unsigned long)’未定义的引用
collect2: error: ld returned 1 exit status
daemon/CMakeFiles/linphone-daemon.dir/build.make:799: recipe for target ‘daemon/linphone-daemon’ failed
make[2]: *** [daemon/linphone-daemon] Error 1
CMakeFiles/Makefile2:552: recipe for target ‘daemon/CMakeFiles/linphone-daemon.dir/all’ failed
make[1]: *** [daemon/CMakeFiles/linphone-daemon.dir/all] Error 2
[ 88%] Built target linphone
Makefile:135: recipe for target ‘all’ failed
make: *** [all] Error 2
解决问题:重新编译belcard,不指定安装目录。

继续编译linphone:
出现以下问题:
/home/smart/second_version/myprogram/tool_program/linphone/linphone-sdk/liblinphone-master/tester/liblinphone_tester.h:23:30: fatal error: bctoolbox/tester.h: 没有那个文件或目录
解决问题:在CMakeLists.txt中添加257添加bctoolbox的目录

继续编译linphone:
出现以下问题:
/home/smart/second_version/myprogram/tool_program/linphone/linphone-sdk/liblinphone-master/tester/local_conference_tester.cpp: In function ‘void LinphoneTest::two_overlapping_conferences_base(bool_t)’:
/home/smart/second_version/myprogram/tool_program/linphone/linphone-sdk/liblinphone-master/tester/local_conference_tester.cpp:2362:43: error: assuming signed overflow does not occur when assuming that (X + c) >= X is always true [-Werror=strict-overflow]
if ((end_time >= 0) && (start_time >= 0) && (end_time > start_time)) {
^
cc1plus: all warnings being treated as errors
tester/CMakeFiles/liblinphone_tester.dir/build.make:635: recipe for target ‘tester/CMakeFiles/liblinphone_tester.dir/local_conference_tester.cpp.o’ failed
make[2]: *** [tester/CMakeFiles/liblinphone_tester.dir/local_conference_tester.cpp.o] Error 1
CMakeFiles/Makefile2:734: recipe for target ‘tester/CMakeFiles/liblinphone_tester.dir/all’ failed
make[1]: *** [tester/CMakeFiles/liblinphone_tester.dir/all] Error 2
Makefile:135: recipe for target ‘all’ failed
make: *** [all] Error 2
解决问题:
在CMakeLists.txt中添加add_definitions(-Wno-error=strict-overflow),重新编译。(在编译步骤加上如下选项:make -j14 -Wno-error,将error变为warning,括号内的可以不加)

继续编译linphone:
出现以下问题:
/usr/bin/ld: 找不到 -lbctoolbox-tester
collect2: error: ld returned 1 exit status
tester/CMakeFiles/liblinphone_tester.dir/build.make:1223: recipe for target ‘tester/liblinphone_tester’ failed
make[2]: *** [tester/liblinphone_tester] Error 1
CMakeFiles/Makefile2:734: recipe for target ‘tester/CMakeFiles/liblinphone_tester.dir/all’ failed
make[1]: *** [tester/CMakeFiles/liblinphone_tester.dir/all] Error 2
Makefile:135: recipe for target ‘all’ failed
make: *** [all] Error 2
解决问题:
sudo ln -s /opt/bctoolbox/lib/libbctoolbox-tester.so /usr/lib/libbctoolbox-tester.so;在/urs/lib中添加相关库的软链接

继续编译libphone:
出现以下问题:
/usr/bin/ld: /usr/local/lib/libsoci_core.a(backend-loader.cpp.o): undefined reference to symbol ‘dlclose@@GLIBC_2.2.5’
//lib/x86_64-linux-gnu/libdl.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
tester/CMakeFiles/liblinphone_tester.dir/build.make:1223: recipe for target ‘tester/liblinphone_tester’ failed
make[2]: *** [tester/liblinphone_tester] Error 1
CMakeFiles/Makefile2:734: recipe for target ‘tester/CMakeFiles/liblinphone_tester.dir/all’ failed
make[1]: *** [tester/CMakeFiles/liblinphone_tester.dir/all] Error 2
Makefile:135: recipe for target ‘all’ failed
make: *** [all] Error 2
解决问题:
https://blog.csdn.net/quantum7/article/details/88908429;想找libsoci_core.so,但是只有libsoci_core.a。查看soci的源码中的CMakeLists.txt,确实share被写成OFF,改成ON就可以了,重新编译即可
但是这个方法没有解决掉,上网搜索:https://stackoverflow.com/questions/46060038/undefined-reference-to-symbol-libdl-so-2-error-adding-symbols-dso-missing,在CMakeLists.txt中添加set(CMAKE_CXX_LINK_EXECUTABLE “${CMAKE_CXX_LINK_EXECUTABLE} -ldl”) 并去掉add_definitions(-Wno-error=strict-overflow),然后重新编译。

继续编译libphone:
出现以下问题:
/home/smart/second_version/myprogram/tool_program/linphone/linphone-sdk/liblinphone-master/tester/local_conference_tester.cpp: In function ‘void LinphoneTest::two_overlapping_conferences_base(bool_t)’:
/home/smart/second_version/myprogram/tool_program/linphone/linphone-sdk/liblinphone-master/tester/local_conference_tester.cpp:2362:43: error: assuming signed overflow does not occur when assuming that (X + c) >= X is always true [-Werror=strict-overflow]
if ((end_time >= 0) && (start_time >= 0) && (end_time > start_time)) {
^
cc1plus: all warnings being treated as errors
tester/CMakeFiles/liblinphone_tester.dir/build.make:635: recipe for target ‘tester/CMakeFiles/liblinphone_tester.dir/local_conference_tester.cpp.o’ failed
make[2]: *** [tester/CMakeFiles/liblinphone_tester.dir/local_conference_tester.cpp.o] Error 1
CMakeFiles/Makefile2:734: recipe for target ‘tester/CMakeFiles/liblinphone_tester.dir/all’ failed
make[1]: *** [tester/CMakeFiles/liblinphone_tester.dir/all] Error 2
make[1]: *** 正在等待未完成的任务…
[100%] Linking CXX shared library liblinphone++.so
[100%] Built target linphone++
Makefile:135: recipe for target ‘all’ failed
make: *** [all] Error 2
解决问题:
在CMakeLists.txt中添加上add_definitions(-Wno-error=strict-overflow),并在编译的时候去掉-Wno-error。编译成功

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值