【发布时间】:2016-09-07 10:21:57
【问题描述】:
我正在尝试基于我已经正确构建的 Aosp 树构建一个 Ubuntu Touch 树。 它失败并出现此错误
CAPEWrapper.cpp:16:错误:未定义对“__xlog_buf_printf”的引用
这是文件包含的标题
#include "CAPEWrapper.h"
级联包括
#include <cutils/xlog.h>
反过来又定义了
#if defined(__cplusplus)
extern "C" {
#endif
int __xlog_buf_printf(int bufid, const struct xlog_record *rec, ...);
#if defined(__cplusplus)
}
#endif
我怀疑我的 g++ 没有设置 __cplusplus 宏。这种错误会是一个现实的场景吗?如果这可能是问题所在,我是否需要使用“stdc=something”指定标准实现来解决它?
欢迎任何其他想法。
【问题讨论】:
-
xlog.h 中的代码只是一个函数声明,而不是函数定义。该函数必须在其他地方定义,要么在需要编译到项目中的 .c/.cpp 文件中,要么在要链接的库中。有 cutils/xlog.c* 文件吗?
-
整个树中没有 xlog.c*。由于这个项目很大,你能告诉我一个 grep 模式来查找函数的定义位置吗? OT 仅据我所知:如果问题是编译器不应该找到函数声明,会出现什么错误?
-
如果没有xlog.c*,那么该函数很可能是定义在需要链接的库中,而不是需要编译的源文件中。在这种情况下,头文件的存在只是告诉编译器该名称的函数存在并且具有指定的参数类型和返回类型,然后编译器依赖链接器来链接包含函数实际代码的库。因此,我建议您尝试 Jeremy 发布的解决方案。