【发布时间】:2015-06-20 16:23:22
【问题描述】:
我有一个使用 Cmake 配置以使用 Eclipse 的 C++ 项目。我的问题是我添加了一个似乎无法编译的静态 C 库(即 svm-struct/svm-light),我猜它编译为 C++ 而不是 C。
我将库添加到我的项目中,如下所示:
SET(SVM_LIGHT_SRC_DIR "../../Libraries/svm_rank")
INCLUDE_DIRECTORIES(${SVM_LIGHT_SRC_DIR})
ADD_LIBRARY(
svm_rank_lib STATIC
${SVM_LIGHT_SRC_DIR}/svm_light/svm_learn.c
${SVM_LIGHT_SRC_DIR}/svm_light/svm_common.c
${SVM_LIGHT_SRC_DIR}/svm_light/svm_hideo.c
${SVM_LIGHT_SRC_DIR}/svm_struct/svm_struct_learn.c
${SVM_LIGHT_SRC_DIR}/svm_struct/svm_struct_common.c
${SVM_LIGHT_SRC_DIR}/svm_struct/svm_struct_classify.c
${SVM_LIGHT_SRC_DIR}/svm_struct_api.c
${SVM_LIGHT_SRC_DIR}/svm_struct_learn_custom.c
)
add_executable(${PROJECT_NAME} ${SOURCES})
target_link_libraries(${PROJECT_NAME} svm_rank_lib)
Cmake 的配置似乎很好。在配置的输出中,它指定它找到我的 C 和 C++ 编译器并且它们“工作”。我使用 extern 将标题添加到我的项目文件之一,如下所示:
#ifdef __cplusplus
extern "C" {
# include "svm_struct/svm_struct_common.h"
}
#endif
当我去构建我的项目时,错误就在这里:
../../Libraries/svm_rank/svm_struct/../svm_struct_api_types.h:75:11: error: expected member name or ';' after declaration specifiers
double *class; /* vector of scores that imply ranking */
~~~~~~ ^
1 error generated.
在发生错误的库头中有一个名为“class”的变量,我的猜测是它试图使用 C++ 而不是 C 来编译这个库头。首先这是错误的原因吗?如果是这样,我应该如何解决这个问题?
【问题讨论】:
-
类是保留字
-
@cssGEEK 准确地说:
class是保留关键字。 -
如果您使用的是
gcc,您可以使用-Wc++-compat标志要求它指出您的C 代码中的此类潜在问题。 -
是的,我知道class是c++中的保留关键字,但是头文件是C,我的理解“class”不是保留关键字。我知道我可以修补库,但我想找到解决方案而不必这样做。