我知道有关此错误消息的几个问题,但我没有为我的案例找到合适的解决方案。我想从库中导出Filter类。 Visual Studio 2013只是编译得很好,但是gcc会抛出错误:
prog.cpp:16:17: error: expected initializer before 'Filter'
class DllExport Filter{
^
prog.cpp:22:6: error: 'Filter' has not been declared
void Filter::setFilter(const std::vector<float>& vFilter, unsigned int uNumThreads) {
^
代码:
#ifndef _GNULINUX
#define DllExport __declspec(dllexport)
#else
#define DllExport __attribute__((visibility("default")))
#endif
#include <string>
#include <vector>
#include <iostream>
#ifdef __cplusplus
extern "C" {
namespace FilterAPI {
#endif
class DllExport Filter{
public:
static void setFilter(const std::vector<float>& vFilter, unsigned int uNumThreads);
};
void Filter::setFilter(const std::vector<float>& vFilter, unsigned int uNumThreads) {
}
#ifdef __cplusplus
} // namespace FilterAPI
} // extern "C" {
#endif
编辑:
make文件中的标志是:
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 2.8
# compile CXX with /usr/bin/c++
CXX_FLAGS = -fPIC
CXX_DEFINES = -DFilter_Library_EXPORTS
答案 0 :(得分:1)
我认为你的问题在错误定义,
应为#ifndef __linux
,您可以找到gcc
默认值
与gcc -dM -E - < /dev/null
答案 1 :(得分:0)
我认为您不需要明确声明可见性为&#34;默认&#34;。它在Windows上很重要,是的,但在Linux / POSIX上,默认是你想要的。
#ifdef _WIN32
#define DllExport __declspec(dllexport)
#else
#define DllExport
#endif
这是更常见的习语,至少。