解决ptlib库ptlib_config.h不存在的问题

解决ptlib_config.h编译不存在的问题,以及使用ptlib库的编译错误。

以下为编译ptlib2.19输出信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1>------ 已启动全部重新生成: 项目: PTLib Static, 配置: Debug Win32 ------
1>Using default getdate bison file.
1>已复制 1 个文件。
1>Configuring Build Options
1>PTLib Configure 1.26 - opened configure.ac
1>Predefine variable "ac_top_build_prefix" as "D:\Document\workspace\ptlib\src\ptlib\msos\../../../Lib/Win32/"
1>Could not open ptlib.pc
1>Could not open ptlib_cfg.dxy
1>Written make/ptlib_config.mak
1>Written D:\Document\workspace\ptlib\src\ptlib\msos\../../../Lib/Win32/include/ptlib_config.h
1>Configuration completed.
1>Updating revision include file.
...
1>Console_2017.vcxproj -> D:\Document\workspace\ptlib\src\ptlib\msos\..\..\..\lib\ptlibsd.lib
2>------ 已启动全部重新生成: 项目: PTLib DLL, 配置: Debug Win32 ------
2>Merging symbols ...
2>MergeSym version 1.12.1 on Windows 10 by Equivalence
2>
2>Symbols merged: 1909 added, 0 removed, 16530 total.
2>dllmain.cxx
2> 正在创建库 D:\Document\workspace\ptlib\src\ptlib\msos\..\..\..\lib\ptlibd.lib 和对象 D:\Document\workspace\ptlib\src\ptlib\msos\..\..\..\lib\ptlibd.exp
2>PTLib_2017.vcxproj -> D:\Document\workspace\ptlib\src\ptlib\msos\..\..\..\lib\ptlibd.dll
3>------ 已启动全部重新生成: 项目: Hello World DLL, 配置: Debug Win32 ------
3>hello.cxx
3>helloDLL_2017.vcxproj -> D:\Document\workspace\ptlib\samples\hello_world\..\..\bin\Hello World DLL\Win32\Debug\Hello World DLL.exe
========== 全部重新生成: 成功 3 个,失败 0 个,跳过 0 个 ==========

使用ptlib库编译程序出错信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
include\ptlib\atomic.h(150): warning C4804: “-”: 在操作中使用类型“bool”不安全
include\ptlib\atomic.h(155): error C3861: “_InterlockedAdd”: 找不到标识符
include\ptlib\atomic.h(156): error C3861: “_InterlockedAdd”: 找不到标识符
include\ptlib\atomic.h(156): warning C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型
include\ptlib\atomic.h(157): error C3861: “_InterlockedAdd”: 找不到标识符
include\ptlib\atomic.h(158): error C3861: “_InterlockedAdd”: 找不到标识符
include\ptlib\atomic.h(158): warning C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型
include\ptlib\atomic.h(159): error C3861: “_InterlockedAdd64”: 找不到标识符
include\ptlib\atomic.h(159): error C3861: “_InterlockedExchange64”: 找不到标识符
include\ptlib\atomic.h(159): error C3861: “_InterlockedExchangeAdd64”: 找不到标识符
include\ptlib\atomic.h(160): error C3861: “_InterlockedAdd64”: 找不到标识符
include\ptlib\atomic.h(160): error C3861: “_InterlockedExchange64”: 找不到标识符
include\ptlib\atomic.h(160): error C3861: “_InterlockedExchangeAdd64”: 找不到标识符
include\ptlib\atomic.h(160): warning C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型
include\ptlib/pstring.h(1947): error C2504: “PWCharArray”: 未定义基类
include\ptlib/pstring.h(1954): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
include\ptlib/pstring.h(1954): error C2143: 语法错误: 缺少“,”(在“&”的前面)
include\ptlib/pstring.h(1948): error C2664: “PObject::Comparison PObject::InternalCompareObjectMemoryDirect(const PObject *,const PObject *,int)”: 无法将参数 1 从“const PWideString *”转换为“const PObject *”
include\ptlib/pstring.h(1948): note: 与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
include\ptlib/pstring.h(1954): error C2065: “arr”: 未声明的标识符
include\ptlib/pstring.h(1954): error C2614: “PWideString”: 非法的成员初始化:“PWCharArray”不是基或成员
include\ptlib/pstring.h(1955): error C2039: “AsUCS2”: 不是“PString”的成员
include\ptlib/pstring.h(110): note: 参见“PString”的声明
include\ptlib/pstring.h(1955): error C2614: “PWideString”: 非法的成员初始化:“PWCharArray”不是基或成员
include\ptlib/pstring.h(1957): error C2653: “PWCharArray”: 不是类或命名空间名称
include\ptlib/pstring.h(1958): error C2653: “PWCharArray”: 不是类或命名空间名称
include\ptlib/pstring.h(1958): error C2039: “AsUCS2”: 不是“PString”的成员
include\ptlib/pstring.h(110): note: 参见“PString”的声明
include\ptlib/pstring.h(1961): error C2440: “<function-style-cast>”: 无法从“const PWideString”转换为“PString”
include\ptlib/pstring.h(1961): note: 无构造函数可以接受源类型,或构造函数重载决策不明确
include\ptlib/pstring.h(1963): error C3861: “GetSize”: 找不到标识符
include\ptlib/pstring.h(1966): error C2614: “PWideString”: 非法的成员初始化:“PWCharArray”不是基或成员
include\ptlib/pstring.h(2156): error C2039: “AsUCS2”: 不是“PConstantString<PString>”的成员
include\ptlib/pstring.h(2148): note: 参见“PConstantString<PString>”的声明
include\ptlib/pstring.h(2156): error C2614: “PWideString”: 非法的成员初始化:“PWCharArray”不是基或成员
include\ptlib/pstring.h(2157): error C2653: “PWCharArray”: 不是类或命名空间名称
include\ptlib/pstring.h(2157): error C2039: “AsUCS2”: 不是“PConstantString<PString>”的成员
include\ptlib/pstring.h(2148): note: 参见“PConstantString<PString>”的声明
include\ptlib/pstring.h(2158): error C2653: “PWCharArray”: 不是类或命名空间名称
include\ptlib/pstring.h(2158): error C2039: “AsUCS2”: 不是“PConstantString<PString>”的成员
include\ptlib/pstring.h(2148): note: 参见“PConstantString<PString>”的声明

解决问题

  • 编译ptlib会根据系统编译器产生新的ptlib_config.h文件;

    1
    Written D:\Document\workspace\ptlib\src\ptlib\msos\../../../Lib/Win32/include/ptlib_config.h
  • 一般路径为:

    1
    ptlib\lib\Win32\include\ptlib_config.h
  • 需要注意的是不可直接修改ptlib_config.h.in文件,不然会可能导致以上的编译出错信息。

    1
    ptlib\include\ptlib_config.h.in