条件编译#if、#ifdef、#ifndef 及#define和const区别


1、#ifndef的作用

  • 1、头文件中使用,防止头文件被多重调用。
    被重复引用是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成。
    比如:存在a.h文件#include "c.h"而此时b.cpp文件导入了#include “a.h” 和#include "c.h"此时就会造成c.h重复引用。

  • 2、作为测试使用,省去注释代码的麻烦。
    VS/VC 有两种编译模式,Debug 和 Release。
    使用 Debug 模式,这样便于程序的调试;而最终发布的程序,使用 Release 模式,这样编译器会进行很多优化,提高程序运行效率,删除冗余信息。

#include <stdio.h>
#include <stdlib.h>
int main(){
    #ifdef _DEBUG
        printf("正在使用 Debug 模式编译程序...\n");
    #else
        printf("正在使用 Release 模式编译程序...\n");
    #endif

    system("pause");
    return 0;
}
  • 3、作为不同角色或者场景的判断使用。
    如跨平台,在 Windows 和 Linux 下都能运行程序示例
#include <stdio.h>
int main(){
    #if _WIN32
        printf("This is Windows!\n");
    #else
        printf("Unknown platform!\n");
    #endif
   
    #if __linux__
        printf("This is Linux!\n");
    #endif

    return 0;
}

2、头文件被重复引用会怎么样?

  • 影响编译过程效率
    对于大工程,头文件重复被引用会导致编译工作量加大,效率低下。
  • 引起错误
    在头文件中定义了全局变量(虽然这种方式不被推荐,但确实是C规范允许的)这种会引起重复定义。
    如下示例,在vc中链接时就出现了变量 i 重复定义的错误,而在c中成功编译。
    在这里插入图片描述
#ifndef AAA
#define AAA
...
int i;
...
#endif

问题分析:
(1).当你第一个使用这个头的.cpp文件生成.obj的时候,int i 在里面定义了当另外一个使用这个的.cpp再次[单独]生成.obj的时候,int i 又被定义然后两个obj被另外一个.cpp也include 这个头的,连接在一起,就会出现重复定义.
(2).把源程序文件扩展名改成.c后,VC按照C语言的语法对源程序进行编译,而不是C++。在C语言中,若是遇到多个int i,则自动认为其中一个是定义,其他的是声明。
(3).C语言和C++语言连接结果不同,可能(猜测)时在进行编译的时候,C++语言将全局
变量默认为强符号,所以连接出错。C语言则依照是否初始化进行强弱的判断的。(参考)

解决方案:
1).把源程序文件扩展名改成.c。

<x.c>
int i;

(2).推荐解决方案:
.h中只声明 extern int i;在.cpp中定义

<x.h>
#ifndef __X_H__
#define __X_H__
extern int i;
#endif //__X_H__

3、头文件中都要加入#ifndef/#define/#endif ?

  • 不是,但是不管怎样,用#ifndef xxx #define xxx #endif或者其他方式避免头文件重复包含,只有好处没有坏处。个人觉得培养一个好的编程习惯是学习编程的一个重要分支。

4、#ifndef/#define/#endif 具体含义

  • #ifndef A_H意思是"if not define a.h" 如果不存在a.h
    接着的语句应该#define A_H 就引入a.h
    最后一句应该写#endif 否则不需要引入

#ifdef identifier
#ifndef identifier

这些指令等效于:

#if defined identifier
#if !defined identifier

5、#ifndef/#define/#endif 示例

#ifndef _STDIO_H_   //如:头文件stdio.h,命名规则一般是头文件名全大写,前后加下划线
#define _STDIO_H_ 
...... 
#endif 

6、 #if,#ifdef, #ifndef 的比较

  • #if 后面跟的是“整型常量表达式”,而 #ifdef 和 #ifndef 后面跟的只能是一个宏名。
  • #if 命令要求判断条件为“整型常量表达式”,也就是说,表达式中不能包含变量,而且结果必须是整数;而 if 后面的表达式没有限制,只要符合语法就行
#include <stdio.h>
#define NUM1 10
#define NUM2 20
int main(){
    #if (defined NUM1 && defined NUM2)
        //代码A
        printf("NUM1: %d, NUM2: %d\n", NUM1, NUM2);
    #else
        //代码B
        printf("Error\n");
    #endif
    return 0;
}

7、const 与 #define的比较

  • 宏定义 #define
    指令都是以#开始的,我们来看一下简单的宏定义(对象式宏)
  #define MAX(x,y) ((x)>(y)?(x):(y))
  #define ISLEAP(y) ((y)%4==0&&(y)%100!=0||(y)%400==0)
  #define ISSMALL(m) ((m)==4||(m)==6||(m)==9||(m)==11)
  #define NORMAL(m) (ISSMALL(m)?30:31)
  #define DAYS(y,m) ((m)==2?28+ISLEAP(y):NORMAL(m))

用于调试的示例:

#if (comdition)
  {//语句##;}
#endif
  //如果(comdition)为真, 也就是逻辑1的话,编译下面的语句,如果(comdition)为假,即逻辑0,则不编译下面的语句。例子如下:
  #define DEBUG 1
  #if DEBUG
  Printf(“Value of i:%d\n”, i);
  Printf(“Value of j:%d\n”, j);
  #endif
  • const 与 #define比较
  • 角度1:定义常量:
    const 定义的常数是变量 也带类型, #define 定义的只是个常数 不带类型。
  • 角度2:空间占用
    宏定义不分配内存,变量定义分配内存,
    const常量会在内存中分配(可以是堆中也可以是栈中)
#define PI 3.14     //预处理后 占用代码段空间
const float PI=3.14;    //本质上还是一个 float,占用数据段空间
  • 角度3:起作用的阶段
    define是在编译的预处理阶段起作用,而const是在 编译、运行的时候起作用
  • 角度4:起作用的方式
    define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误
#define N 2+3 //我们预想的N值是5,我们这样使用N
double a = N/2;  //我们预想的a的值是2.5,可实际上a的值是3.5
  • 角度5:代码调试
    const常量可以进行调试的,define是不能进行调试的,因为在预编译阶段就已经替换掉
  • 角度6:重定义
    const不能重定义,而#define可以通过#undef取消某个符号的定义,再重新定义
  • 角度7:防止头文件重复引用
    define可以用来防止头文件重复引用
  • 角度8:复杂功能
    使用define会使得代码看起来非常简单,而const无法实现该功能
    例如,MFC在实现六大核心机制中,大量使用了define
    1、MFC程序的初始化
    2、运行时类型识别(RTTI)
    3、动态创建
    4、永久保存
    5、消息映射
    6、消息传递

比如,在实现RTTI功能的时候,定义了如下宏,代码如下:

#define DECLARE_DYNCREATE(class_name) \

    DECLARE_DYNAMIC(class_name)\

    static CObject* PASCALCreateObject();

感谢博主分享

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
centos7 tfs部署笔记.txt 环境信息: Docker version 1.8.2-fc22, build cb216be/1.8.2 Fedora release 22 (Twenty Two) Linux localhost.localdomain 4.0.4-301.fc22.x86_64 #1 SMP Thu May 21 13:10:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux docker centos:CentOS Linux release 7.2.1511 (Core) 参考: http://code.taobao.org/p/tfs/wiki/get/ http://my.oschina.net/beiyou/blog/76129?fromerr=bGluCWDI tfs版本:2.2.16 centos:7.2.1511 gcc:4.8.5 # docker run -i -t centos /bin/bash [root@2f60c4bcddfa /]# yum install make automake autoconf libtool gcc gcc-c++ libuuid-devel zlib-devel mysql-devel readline-devel gperftools-devel.x86_64 -y Libraries have been installed in: /usr/local/lib64//lib If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the `LD_RUN_PATH' environment variable during linking - use the `-Wl,-rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to `/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- /usr/bin/mkdir -p '/usr/local/lib64//include/tbnet' /usr/bin/install -c -m 644 channel.h channelpool.h connection.h controlpacket.h databuffer.h defaultpacketstreamer.h epollsocketevent.h httppacketstreamer.h httprequestpacket.h httpresponsepacket.h iocomponent.h ipacketfactory.h ipackethandler.h ipacketstreamer.h iserveradapter.h packet.h packetqueue.h packetqueuethread.h serversocket.h socketevent.h socket.h stats.h tbnet.h tcpacceptor.h tcpcomponent.h tcpconnection.h transport.h udpacceptor.h udpcomponent.h udpconnection.h connectionmanager.h '/usr/local/lib64//include/tbnet' [root@2f60c4bcddfa tfs_release-2.2.16]# ./configure --prefix=/usr/local/ configure ok make 问题 : serialization.h:575:27: error: conversion to 'char' from 'long int' may alter its value [-Werror=conversion] buff[3] = (v>>32) & 0xFF; ^ serialization.h:576:27: error: conversion to 'char' from 'long int' may alter its value [-Werror=conversion] buff[2] = (v>>40) & 0xFF; ^ serialization.h:577:27: error: conversion to 'char' from 'long int' may alter its value [-Werror=conversion] buff[1] = (v>>48) & 0xFF; ^ serialization.h:578:27: error: conversion to 'char' from 'long int' may alter its value [-Werror=conversion] 解决 [root@2f60c4bcddfa tfs_release-2.2.16]# find -name Makefile | xargs sed -i 's/-Werror//' 问题 : In file included from session_util.cpp:1:0: session_util.h:30:43: 错误:‘int32_t’不是一个类型名 static void gene_session_id(const int32_t app_id, const int64_t session_ip, std::string& session_id); ^ session_util.h:30:51: 错误:ISO C++ 不允许声明无类型的‘app_id’ [-fpermissive] static void gene_session_id(const int32_t app_id, const int64_t session_ip, std::string& session_id); ^ session_util.h:30:65: 错误:‘int64_t’不是一个类型名 static void gene_session_id(const int32_t app_id, const int64_t session_ip, std::string& session_id); ^ session_util.h:30:73: 错误:ISO C++ 不允许声明无类型的‘session_ip’ [-fpermissive] static void gene_session_id(const int32_t app_id, const int64_t session_ip, std::string& session_id); ^ session_util.h:31:68: 错误:‘int32_t’未声明 static int parse_session_id(const std::string& session_id, int32_t& app_id, int64_t& session_ip); ^ session_util.h:31:85: 错误:‘int64_t’未声明 static int parse_session_id(const std::string& session_id, int32_t& app_id, int64_t& session_ip); session_util.cpp:24:10: 错误:‘void tfs::common::SessionUtil::gene_session_id(int32_t, int64_t, std::string&)’的原型不匹配类‘tfs::common::SessionUtil’中的任何一个 void SessionUtil::gene_session_id(const int32_t app_id, const int64_t session_ip, string& session_id) ^ In file included from session_util.cpp:1:0: session_util.h:30:21: 错误:备选为:static void tfs::common::SessionUtil::gene_session_id(int, int, std::string&) static void gene_session_id(const int32_t app_id, const int64_t session_ip, std::string& session_id); ^ session_util.cpp:31:9: 错误:‘int tfs::common::SessionUtil::parse_session_id(const string&, int32_t&, int64_t&)’的原型不匹配类‘tfs::common::SessionUtil’中的任何一个 int SessionUtil::parse_session_id(const string& session_id, int32_t& app_id, int64_t& session_ip) ^ In file included from session_util.cpp:1:0: session_util.h:31:20: 错误:备选为:static int tfs::common::SessionUtil::parse_session_id(const string&, int&, int&) static int parse_session_id(const std::string& session_id, int32_t& app_id, int64_t& session_ip); 解决 [root@localhost tfs_release-2.2.16]# vim src/common/session_util.h 添 #include <stdint.h> 整体代码如下 #ifndef TFS_COMMON_SESSIONUTIL_H_ #define TFS_COMMON_SESSIONUTIL_H_ #include <string> #include <stdint.h> namespace tfs { namespace common { static const char SEPARATOR_KEY = '-'; class SessionUtil { public: static std::string gene_uuid_str(); static void gene_session_id(const int32_t app_id, const int64_t session_ip, std::string& session_id); static int parse_session_id(const std::string& session_id, int32_t& app_id, int64_t& session_ip); }; } } #endif //TFS_RCSERVER_SESSIONUUID_H_ 问题: /lib64//lib/libtbsys.a -lrt -lpthread -lm -ldl -lc /usr/bin/ld: cannot find -ljemalloc collect2: error: ld returned 1 exit statu 解决 curl -O http://www.canonware.com/download/jemalloc/jemalloc-4.0.4.tar.bz2 tar -jxvf jemalloc-4.0.4.tar.bz2 cd jemalloc-4.0.4/ && ./configure && make && make install 问题: block_collect.cpp:229:17: 错误:‘abs’不是‘__gnu_cxx’的成员 if (__gnu_cxx::abs(info_.version_ - info.version_) <= VERSION_AGREED_MASK)//version agreed ^ client_request_server.cpp:167:21: error: 'abs' is not a member of '__gnu_cxx' stat[3] = __gnu_cxx::abs(out.size() - block_count); 解决:替换成cstdlib的abs 问题: meta_server_service.cpp:1584:48: error: invalid conversion from 'const char*' to 'char*' [-fpermissive] char* pos = strstr(sub_dir, parents_dir); 解决:添编译参数-fpermissive [root@localhost tfs_release-2.2.16]# vim src/name_meta_server/Makefile CXXFLAGS = -g -D__STDC_LIMIT_MACROS -Wall -Wextra -Wunused-parameter -Wformat -Wconversion -Wdeprecated -fpermissive [root@localhost tfs_release-2.2.16]# make Making all in src make[1]: Entering directory `/usr/local/tfs_release-2.2.16/src' Making all in common make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/common' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/common' Making all in message make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/message' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/message' Making all in new_client make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/new_client' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/new_client' Making all in dataserver make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/dataserver' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/dataserver' Making all in nameserver make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/nameserver' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/nameserver' Making all in adminserver make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/adminserver' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/adminserver' Making all in tools make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools' Making all in util make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/util' make[3]: Nothing to be done for `all'. make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/util' Making all in dataserver make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/dataserver' make[3]: Nothing to be done for `all'. make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/dataserver' Making all in nameserver make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/nameserver' make[3]: Nothing to be done for `all'. make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/nameserver' Making all in adminserver make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/adminserver' make[3]: Nothing to be done for `all'. make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/adminserver' Making all in mock make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/mock' make[3]: Nothing to be done for `all'. make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/mock' Making all in transfer make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/transfer' make[3]: Nothing to be done for `all'. make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/transfer' Making all in cluster make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/cluster' make[3]: Nothing to be done for `all'. make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/cluster' make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools' make[3]: Nothing to be done for `all-am'. make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools' make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools' Making all in rcserver make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/rcserver' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/rcserver' Making all in monitor make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/monitor' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/monitor' Making all in name_meta_server make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/name_meta_server' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/name_meta_server' Making all in rootserver make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/rootserver' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/rootserver' Making all in checkserver make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/checkserver' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/checkserver' make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src' make[2]: Nothing to be done for `all-am'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src' make[1]: Leaving directory `/usr/local/tfs_release-2.2.16/src' Making all in conf make[1]: Entering directory `/usr/local/tfs_release-2.2.16/conf' make[1]: Nothing to be done for `all'. make[1]: Leaving directory `/usr/local/tfs_release-2.2.16/conf' Making all in scripts make[1]: Entering directory `/usr/local/tfs_release-2.2.16/scripts' Making all in ha make[2]: Entering directory `/usr/local/tfs_release-2.2.16/scripts/ha' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/scripts/ha' make[2]: Entering directory `/usr/local/tfs_release-2.2.16/scripts' make[2]: Nothing to be done for `all-am'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/scripts' make[1]: Leaving directory `/usr/local/tfs_release-2.2.16/scripts' Making all in sql make[1]: Entering directory `/usr/local/tfs_release-2.2.16/sql' Making all in ms make[2]: Entering directory `/usr/local/tfs_release-2.2.16/sql/ms' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/sql/ms' Making all in rcs make[2]: Entering directory `/usr/local/tfs_release-2.2.16/sql/rcs' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/sql/rcs' make[2]: Entering directory `/usr/local/tfs_release-2.2.16/sql' make[2]: Nothing to be done for `all-am'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/sql' make[1]: Leaving directory `/usr/local/tfs_release-2.2.16/sql' make[1]: Entering directory `/usr/local/tfs_release-2.2.16' make[1]: Nothing to be done for `all-am'. make[1]: Leaving directory `/usr/local/tfs_release-2.2.16' [root@localhost tfs_release-2.2.16]# make install Making install in src make[1]: Entering directory `/usr/local/tfs_release-2.2.16/src' Making install in common make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/common' make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/common' make[3]: Nothing to be done for `install-exec-am'. /usr/bin/mkdir -p '/usr/local/include' /usr/bin/install -c -m 644 define.h cdefine.h lock.h func.h internal.h meta_server_define.h rts_define.h error_msg.h '/usr/local/include' make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/common' make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/common' Making install in message make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/message' make[2]: Nothing to be done for `install'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/message' Making install in new_client make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/new_client' make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/new_client' /usr/bin/mkdir -p '/usr/local/lib' /bin/sh ../../libtool --mode=install /usr/bin/install -c libtfsclient.la libtfsclient_c.la '/usr/local/lib' libtool: install: /usr/bin/install -c .libs/libtfsclient.so.0.0.0 /usr/local/lib/libtfsclient.so.0.0.0 libtool: install: (cd /usr/local/lib && { ln -s -f libtfsclient.so.0.0.0 libtfsclient.so.0 || { rm -f libtfsclient.so.0 && ln -s libtfsclient.so.0.0.0 libtfsclient.so.0; }; }) libtool: install: (cd /usr/local/lib && { ln -s -f libtfsclient.so.0.0.0 libtfsclient.so || { rm -f libtfsclient.so && ln -s libtfsclient.so.0.0.0 libtfsclient.so; }; }) libtool: install: /usr/bin/install -c .libs/libtfsclient.lai /usr/local/lib/libtfsclient.la libtool: install: /usr/bin/install -c .libs/libtfsclient_c.so.0.0.0 /usr/local/lib/libtfsclient_c.so.0.0.0 libtool: install: (cd /usr/local/lib && { ln -s -f libtfsclient_c.so.0.0.0 libtfsclient_c.so.0 || { rm -f libtfsclient_c.so.0 && ln -s libtfsclient_c.so.0.0.0 libtfsclient_c.so.0; }; }) libtool: install: (cd /usr/local/lib && { ln -s -f libtfsclient_c.so.0.0.0 libtfsclient_c.so || { rm -f libtfsclient_c.so && ln -s libtfsclient_c.so.0.0.0 libtfsclient_c.so; }; }) libtool: install: /usr/bin/install -c .libs/libtfsclient_c.lai /usr/local/lib/libtfsclient_c.la libtool: install: /usr/bin/install -c .libs/libtfsclient.a /usr/local/lib/libtfsclient.a libtool: install: chmod 644 /usr/local/lib/libtfsclient.a libtool: install: ranlib /usr/local/lib/libtfsclient.a libtool: install: /usr/bin/install -c .libs/libtfsclient_c.a /usr/local/lib/libtfsclient_c.a libtool: install: chmod 644 /usr/local/lib/libtfsclient_c.a libtool: install: ranlib /usr/local/lib/libtfsclient_c.a libtool: finish: PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/sbin" ldconfig -n /usr/local/lib ---------------------------------------------------------------------- Libraries have been installed in: /usr/local/lib If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the `LD_RUN_PATH' environment variable during linking - use the `-Wl,-rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to `/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- make install-exec-hook make[4]: Entering directory `/usr/local/tfs_release-2.2.16/src/new_client' tmp_dir=".tfs_tmp_dir";\ for client_lib in libtfsclient.a libtfsclient_c.a; \ do \ cd /usr/local/lib;\ test -d $tmp_dir && rm -rf $tmp_dir;\ mkdir -p $tmp_dir && mv $client_lib $tmp_dir;\ cd $tmp_dir;\ ar x $client_lib;\ rm -f $client_lib;\ for i in *.a ; do\ lib_tmp_dir=".tmp_$i";\ mkdir -p $lib_tmp_dir;\ mv $i $lib_tmp_dir;\ cd $lib_tmp_dir;\ ar x $i;\ cd ../; done;\ ar cru ../$client_lib `find . -name '*.o'`;\ ranlib ../$client_lib;\ chmod 644 ../$client_lib;\ done; \ cd .. && rm -rf $tmp_dir make[4]: Leaving directory `/usr/local/tfs_release-2.2.16/src/new_client' /usr/bin/mkdir -p '/usr/local/include' /usr/bin/install -c -m 644 tfs_client_api.h tfs_client_capi.h tfs_rc_client_api.h tfs_meta_client_api.h '/usr/local/include' make install-data-hook make[4]: Entering directory `/usr/local/tfs_release-2.2.16/src/new_client' cd /usr/local/include && \ sed -i 's#common/\(.*\.h\)#\1#g' tfs_client_api.h tfs_client_capi.h tfs_rc_client_api.h tfs_meta_client_api.h && \ sed -i -n -e '/ifdef \+WITH_UNIQUE_STORE/{h;d}' -e '/endif/{x;/ifdef \+WITH_UNIQUE_STORE/d;x;p;d}' -e 'x;/ifdef \+WITH_UNIQUE_STORE/{x;d};x;p' tfs_client_api.h tfs_client_capi.h tfs_rc_client_api.h tfs_meta_client_api.h make[4]: Leaving directory `/usr/local/tfs_release-2.2.16/src/new_client' make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/new_client' make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/new_client' Making install in dataserver make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/dataserver' make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/dataserver' /usr/bin/mkdir -p '/usr/local/bin' /bin/sh ../../libtool --mode=install /usr/bin/install -c dataserver '/usr/local/bin' libtool: install: /usr/bin/install -c dataserver /usr/local/bin/dataserver make[3]: Nothing to be done for `install-data-am'. make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/dataserver' make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/dataserver' Making install in nameserver make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/nameserver' make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/nameserver' /usr/bin/mkdir -p '/usr/local/bin' /bin/sh ../../libtool --mode=install /usr/bin/install -c nameserver '/usr/local/bin' libtool: install: /usr/bin/install -c nameserver /usr/local/bin/nameserver make[3]: Nothing to be done for `install-data-am'. make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/nameserver' make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/nameserver' Making install in adminserver make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/adminserver' make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/adminserver' /usr/bin/mkdir -p '/usr/local/bin' /bin/sh ../../libtool --mode=install /usr/bin/install -c adminserver '/usr/local/bin' libtool: install: /usr/bin/install -c adminserver /usr/local/bin/adminserver make[3]: Nothing to be done for `install-data-am'. make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/adminserver' make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/adminserver' Making install in tools make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools' Making install in util make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/util' make[4]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/util' make[4]: Nothing to be done for `install-exec-am'. make[4]: Nothing to be done for `install-data-am'. make[4]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/util' make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/util' Making install in dataserver make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/dataserver' make[4]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/dataserver' /usr/bin/mkdir -p '/usr/local/bin' /bin/sh ../../../libtool --mode=install /usr/bin/install -c clear_file_system ds_client format_file_system read_super_block recover_disk_data_to_cluster recover_sync_file_queue convert_name reload_config read_index_tool read_block_prefix reverse_name modify_super_block tfsping view_local_key gen_block_prefix verify_block_to_dataserver '/usr/local/bin' libtool: install: /usr/bin/install -c clear_file_system /usr/local/bin/clear_file_system libtool: install: /usr/bin/install -c ds_client /usr/local/bin/ds_client libtool: install: /usr/bin/install -c format_file_system /usr/local/bin/format_file_system libtool: install: /usr/bin/install -c read_super_block /usr/local/bin/read_super_block libtool: install: /usr/bin/install -c recover_disk_data_to_cluster /usr/local/bin/recover_disk_data_to_cluster libtool: install: /usr/bin/install -c recover_sync_file_queue /usr/local/bin/recover_sync_file_queue libtool: install: /usr/bin/install -c convert_name /usr/local/bin/convert_name libtool: install: /usr/bin/install -c reload_config /usr/local/bin/reload_config libtool: install: /usr/bin/install -c read_index_tool /usr/local/bin/read_index_tool libtool: install: /usr/bin/install -c read_block_prefix /usr/local/bin/read_block_prefix libtool: install: /usr/bin/install -c reverse_name /usr/local/bin/reverse_name libtool: install: /usr/bin/install -c modify_super_block /usr/local/bin/modify_super_block libtool: install: /usr/bin/install -c tfsping /usr/local/bin/tfsping libtool: install: /usr/bin/install -c view_local_key /usr/local/bin/view_local_key libtool: install: /usr/bin/install -c gen_block_prefix /usr/local/bin/gen_block_prefix libtool: install: /usr/bin/install -c verify_block_to_dataserver /usr/local/bin/verify_block_to_dataserver make[4]: Nothing to be done for `install-data-am'. make[4]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/dataserver' make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/dataserver' Making install in nameserver make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/nameserver' make[4]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/nameserver' /usr/bin/mkdir -p '/usr/local/bin' /bin/sh ../../../libtool --mode=install /usr/bin/install -c admintool showsyncoplog rmsyncoplog ssm tfstool performance syncbyfile read_syncoplog_header repair_block_info '/usr/local/bin' libtool: install: /usr/bin/install -c admintool /usr/local/bin/admintool libtool: install: /usr/bin/install -c showsyncoplog /usr/local/bin/showsyncoplog libtool: install: /usr/bin/install -c rmsyncoplog /usr/local/bin/rmsyncoplog libtool: install: /usr/bin/install -c ssm /usr/local/bin/ssm libtool: install: /usr/bin/install -c tfstool /usr/local/bin/tfstool libtool: install: /usr/bin/install -c performance /usr/local/bin/performance libtool: install: /usr/bin/install -c syncbyfile /usr/local/bin/syncbyfile libtool: install: /usr/bin/install -c read_syncoplog_header /usr/local/bin/read_syncoplog_header libtool: install: /usr/bin/install -c repair_block_info /usr/local/bin/repair_block_info make[4]: Nothing to be done for `install-data-am'. make[4]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/nameserver' make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/nameserver' Making install in adminserver make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/adminserver' make[4]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/adminserver' /usr/bin/mkdir -p '/usr/local/bin' /bin/sh ../../../libtool --mode=install /usr/bin/install -c adminservertool '/usr/local/bin' libtool: install: /usr/bin/install -c adminservertool /usr/local/bin/adminservertool make[4]: Nothing to be done for `install-data-am'. make[4]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/adminserver' make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/adminserver' Making install in mock make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/mock' make[4]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/mock' /usr/bin/mkdir -p '/usr/local/bin' /bin/sh ../../../libtool --mode=install /usr/bin/install -c mock_data_server '/usr/local/bin' libtool: install: /usr/bin/install -c mock_data_server /usr/local/bin/mock_data_server make[4]: Nothing to be done for `install-data-am'. make[4]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/mock' make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/mock' Making install in transfer make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/transfer' make[4]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/transfer' /usr/bin/mkdir -p '/usr/local/bin' /bin/sh ../../../libtool --mode=install /usr/bin/install -c transfer_block split_block_tool compare_crc compare_same_cluster transfer_same_cluster_block compare_same_cluster_ext remove_block verify_file_same_cluster transfer_ge_dirs transfer_logo_tool '/usr/local/bin' libtool: install: /usr/bin/install -c transfer_block /usr/local/bin/transfer_block libtool: install: /usr/bin/install -c split_block_tool /usr/local/bin/split_block_tool libtool: install: /usr/bin/install -c compare_crc /usr/local/bin/compare_crc libtool: install: /usr/bin/install -c compare_same_cluster /usr/local/bin/compare_same_cluster libtool: install: /usr/bin/install -c transfer_same_cluster_block /usr/local/bin/transfer_same_cluster_block libtool: install: /usr/bin/install -c compare_same_cluster_ext /usr/local/bin/compare_same_cluster_ext libtool: install: /usr/bin/install -c remove_block /usr/local/bin/remove_block libtool: install: /usr/bin/install -c verify_file_same_cluster /usr/local/bin/verify_file_same_cluster libtool: install: /usr/bin/install -c transfer_ge_dirs /usr/local/bin/transfer_ge_dirs libtool: install: /usr/bin/install -c transfer_logo_tool /usr/local/bin/transfer_logo_tool make[4]: Nothing to be done for `install-data-am'. make[4]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/transfer' make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/transfer' Making install in cluster make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/cluster' make[4]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools/cluster' /usr/bin/mkdir -p '/usr/local/bin' /bin/sh ../../../libtool --mode=install /usr/bin/install -c sync_by_blk sync_by_log sync_by_file transfer_by_file sync_analyze_tool '/usr/local/bin' libtool: install: /usr/bin/install -c sync_by_blk /usr/local/bin/sync_by_blk libtool: install: /usr/bin/install -c sync_by_log /usr/local/bin/sync_by_log libtool: install: /usr/bin/install -c sync_by_file /usr/local/bin/sync_by_file libtool: install: /usr/bin/install -c transfer_by_file /usr/local/bin/transfer_by_file libtool: install: /usr/bin/install -c sync_analyze_tool /usr/local/bin/sync_analyze_tool make[4]: Nothing to be done for `install-data-am'. make[4]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/cluster' make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools/cluster' make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools' make[4]: Entering directory `/usr/local/tfs_release-2.2.16/src/tools' make[4]: Nothing to be done for `install-exec-am'. make[4]: Nothing to be done for `install-data-am'. make[4]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools' make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools' make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/tools' Making install in rcserver make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/rcserver' make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/rcserver' /usr/bin/mkdir -p '/usr/local/bin' /bin/sh ../../libtool --mode=install /usr/bin/install -c rcserver '/usr/local/bin' libtool: install: /usr/bin/install -c rcserver /usr/local/bin/rcserver make[3]: Nothing to be done for `install-data-am'. make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/rcserver' make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/rcserver' Making install in monitor make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/monitor' make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/monitor' /usr/bin/mkdir -p '/usr/local/bin' /bin/sh ../../libtool --mode=install /usr/bin/install -c ha_monitor ns_ping '/usr/local/bin' libtool: install: /usr/bin/install -c ha_monitor /usr/local/bin/ha_monitor libtool: install: /usr/bin/install -c ns_ping /usr/local/bin/ns_ping make[3]: Nothing to be done for `install-data-am'. make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/monitor' make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/monitor' Making install in name_meta_server make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/name_meta_server' make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/name_meta_server' /usr/bin/mkdir -p '/usr/local/bin' /bin/sh ../../libtool --mode=install /usr/bin/install -c metaserver '/usr/local/bin' libtool: install: /usr/bin/install -c metaserver /usr/local/bin/metaserver make[3]: Nothing to be done for `install-data-am'. make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/name_meta_server' make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/name_meta_server' Making install in rootserver make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/rootserver' make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/rootserver' /usr/bin/mkdir -p '/usr/local/bin' /bin/sh ../../libtool --mode=install /usr/bin/install -c rootserver '/usr/local/bin' libtool: install: /usr/bin/install -c rootserver /usr/local/bin/rootserver make[3]: Nothing to be done for `install-data-am'. make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/rootserver' make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/rootserver' Making install in checkserver make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src/checkserver' make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src/checkserver' /usr/bin/mkdir -p '/usr/local/bin' /bin/sh ../../libtool --mode=install /usr/bin/install -c checkserver '/usr/local/bin' libtool: install: /usr/bin/install -c checkserver /usr/local/bin/checkserver make[3]: Nothing to be done for `install-data-am'. make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src/checkserver' make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src/checkserver' make[2]: Entering directory `/usr/local/tfs_release-2.2.16/src' make[3]: Entering directory `/usr/local/tfs_release-2.2.16/src' make[3]: Nothing to be done for `install-exec-am'. make[3]: Nothing to be done for `install-data-am'. make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/src' make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/src' make[1]: Leaving directory `/usr/local/tfs_release-2.2.16/src' Making install in conf make[1]: Entering directory `/usr/local/tfs_release-2.2.16/conf' make[2]: Entering directory `/usr/local/tfs_release-2.2.16/conf' make[2]: Nothing to be done for `install-exec-am'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/conf' make[1]: Leaving directory `/usr/local/tfs_release-2.2.16/conf' Making install in scripts make[1]: Entering directory `/usr/local/tfs_release-2.2.16/scripts' Making install in ha make[2]: Entering directory `/usr/local/tfs_release-2.2.16/scripts/ha' make[3]: Entering directory `/usr/local/tfs_release-2.2.16/scripts/ha' make[3]: Nothing to be done for `install-exec-am'. /usr/bin/mkdir -p '/usr/local/scripts/ha' /usr/bin/install -c -m 644 authkeys.sh deploy.sh ha.cf NameServer RootServer rsdep.sh nsdep.sh ns.xml rs.xml '/usr/local/scripts/ha' make install-data-hook make[4]: Entering directory `/usr/local/tfs_release-2.2.16/scripts/ha' mv //usr/local/scripts/ha/authkeys.sh //usr/local/scripts/ha/authkeys mv //usr/local/scripts/ha/deploy.sh //usr/local/scripts/ha/deploy mv //usr/local/scripts/ha/nsdep.sh //usr/local/scripts/ha/nsdep mv //usr/local/scripts/ha/rsdep.sh //usr/local/scripts/ha/rsdep chmod u+x //usr/local/scripts/ha/authkeys chmod u+x //usr/local/scripts/ha/deploy chmod u+x //usr/local/scripts/ha/nsdep chmod u+x //usr/local/scripts/ha/rsdep chmod u+x //usr/local/scripts/ha/NameServer chmod u+x //usr/local/scripts/ha/RootServer make[4]: Leaving directory `/usr/local/tfs_release-2.2.16/scripts/ha' make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/scripts/ha' make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/scripts/ha' make[2]: Entering directory `/usr/local/tfs_release-2.2.16/scripts' make[3]: Entering directory `/usr/local/tfs_release-2.2.16/scripts' make[3]: Nothing to be done for `install-exec-am'. /usr/bin/mkdir -p '/usr/local/scripts' /usr/bin/install -c -m 644 stfs.sh tfs.sh start_sync_log.sh sync.sh cs_sync.sh '/usr/local/scripts' make install-data-hook make[4]: Entering directory `/usr/local/tfs_release-2.2.16/scripts' mv //usr/local/scripts/stfs.sh //usr/local/scripts/stfs mv //usr/local/scripts/tfs.sh //usr/local/scripts/tfs mv //usr/local/scripts/sync.sh //usr/local/scripts/sync mv //usr/local/scripts/start_sync_log.sh //usr/local/scripts/start_sync_log mv //usr/local/scripts/cs_sync.sh //usr/local/scripts/cs_sync chmod u+x //usr/local/scripts/stfs chmod u+x //usr/local/scripts/tfs chmod u+x //usr/local/scripts/sync chmod u+x //usr/local/scripts/start_sync_log chmod u+x //usr/local/scripts/cs_sync sed -i 's#\(TFS_HOME=\).*$#\1/usr/local#g' //usr/local/scripts/stfs //usr/local/scripts/tfs make[4]: Leaving directory `/usr/local/tfs_release-2.2.16/scripts' make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/scripts' make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/scripts' make[1]: Leaving directory `/usr/local/tfs_release-2.2.16/scripts' Making install in sql make[1]: Entering directory `/usr/local/tfs_release-2.2.16/sql' Making install in ms make[2]: Entering directory `/usr/local/tfs_release-2.2.16/sql/ms' make[3]: Entering directory `/usr/local/tfs_release-2.2.16/sql/ms' make[3]: Nothing to be done for `install-exec-am'. /usr/bin/mkdir -p '/usr/local/sql/ms' /usr/bin/install -c -m 644 create_dir.sql create_file.sql create_table.sql mv_dir.sql mv_file.sql pwrite_file.sql rm_dir.sql rm_file.sql seq_simulator.sql '/usr/local/sql/ms' make install-data-hook make[4]: Entering directory `/usr/local/tfs_release-2.2.16/sql/ms' make[4]: Nothing to be done for `install-data-hook'. make[4]: Leaving directory `/usr/local/tfs_release-2.2.16/sql/ms' make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/sql/ms' make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/sql/ms' Making install in rcs make[2]: Entering directory `/usr/local/tfs_release-2.2.16/sql/rcs' make[3]: Entering directory `/usr/local/tfs_release-2.2.16/sql/rcs' make[3]: Nothing to be done for `install-exec-am'. /usr/bin/mkdir -p '/usr/local/sql/rcs' /usr/bin/install -c -m 644 create_table.sql '/usr/local/sql/rcs' make install-data-hook make[4]: Entering directory `/usr/local/tfs_release-2.2.16/sql/rcs' make[4]: Nothing to be done for `install-data-hook'. make[4]: Leaving directory `/usr/local/tfs_release-2.2.16/sql/rcs' make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/sql/rcs' make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/sql/rcs' make[2]: Entering directory `/usr/local/tfs_release-2.2.16/sql' make[3]: Entering directory `/usr/local/tfs_release-2.2.16/sql' make[3]: Nothing to be done for `install-exec-am'. make install-data-hook make[4]: Entering directory `/usr/local/tfs_release-2.2.16/sql' make[4]: Nothing to be done for `install-data-hook'. make[4]: Leaving directory `/usr/local/tfs_release-2.2.16/sql' make[3]: Leaving directory `/usr/local/tfs_release-2.2.16/sql' make[2]: Leaving directory `/usr/local/tfs_release-2.2.16/sql' make[1]: Leaving directory `/usr/local/tfs_release-2.2.16/sql' make[1]: Entering directory `/usr/local/tfs_release-2.2.16' make[2]: Entering directory `/usr/local/tfs_release-2.2.16' make[2]: Nothing to be done for `install-exec-am'. make[2]: Leaving directory `/usr/local/tfs_release-2.2.16' make[1]: Leaving directory `/usr/local/tfs_release-2.2.16'

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值