使用 LIBSVM 将我的 svm.cpp 文件与我的 C 程序链接时出错

Posted

技术标签:

【中文标题】使用 LIBSVM 将我的 svm.cpp 文件与我的 C 程序链接时出错【英文标题】:Error linking my svm.cpp file using LIBSVM with my C program 【发布时间】:2018-01-30 05:14:07 【问题描述】:

我正在尝试使用 C 语言在 Eclipse IDE 上使用 LIBSVM 包。

在 README 文件中,它声明“您需要在 C/C++ 源文件中#include "svm.h" 并且 用 `svm.cpp' 链接你的程序。"

我已在所有源文件中包含“svm.h”,并在源代码文件夹下添加了“svm.cpp”文件。但是,我在“svm.cpp”文件中收到错误“带有 C 链接的模板”。

错误是否与我在程序中添加“svm.cpp”文件的方式有关?我真的不明白,我试着到处搜索。

svm.cpp:

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <float.h>
#include <string.h>
#include <stdarg.h>
#include <limits.h>
#include <locale.h>
#include "libsvm.h"
#include "main.h"


#ifdef __cplusplus
extern "C" 
#endif

int libsvm_version = LIBSVM_VERSION;
typedef float Qfloat;
typedef signed char schar;


#ifndef min
    template <class T> static inline T min(T x,T y)  return (x<y)?x:y; 
#endif


#ifndef max
    template <class T> static inline T max(T x,T y)  return (x>y)?x:y; 
#endif


template <class T> static inline void swap(T& x, T& y)  T t=x; x=y; y=t; 
template <class S, class T> static inline void clone(T*& dst, S* src, int n)

.
.
.
.
.
.
.
.
#ifdef __cplusplus

#endif

【问题讨论】:

【参考方案1】:

您使用的是什么版本的 libsvm,您从哪里下载的?

svm.cpp 中的This version 是否没有在模板周围有extern "C"

如果是你自己添加的,那么你没有其他人可以责备。

如果您的版本带有extern "C",则该版本已损坏:模板确实不能有extern "C" 链接。

更新:

我自己添加了外部“C”,因为我认为这是必要的。错了吗?

是的。

当我没有添加extern "C"时,出现更多错误

您应该接受这个对您问题的回答,删除您的修改,并提出一个新问题,详细说明其他错误。

【讨论】:

我使用了你链接的版本,但是我自己添加了外部“C”,因为我认为这是必要的。这是错的吗?因为当我没有加extern "C"的时候,出现了更多的错误,比如:“undefined reference to '_Heap_Begin'”等等……有没有办法解决这个问题?

以上是关于使用 LIBSVM 将我的 svm.cpp 文件与我的 C 程序链接时出错的主要内容,如果未能解决你的问题,请参考以下文章

java中使用LibSVM的一个例子

R e1071 预测与 libsvm 不同

Libsvm 和 Python:预计算内核使用我的点 id 作为正常功能?

在 Octave 上使用 libsvm (Windows)

libsvm:使用留一法评估 SVM

使用 python 将 CSV 文件转换为 LIBSVM 兼容的数据文件