使用 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 程序链接时出错的主要内容,如果未能解决你的问题,请参考以下文章