我对VS很陌生,遇到了一些麻烦,我设法在VS2015(http://bio3d.colorado.edu/SerialEM/OpenSerialEM)中使用Mercurial插件克隆了一个现有的大型c ++项目,该插件具有多个源文件和头文件,旨在访问主.cpp文件。使用Java的文件。我在主源文件中编写了一个虚拟函数,打算使用SWIG对其进行包装,但没有成功。 SWIG示例很好编译。也是没有SWIG编译的项目。另外,如果我忽略了
%include "SerialEM.h"
可以很好地从界面文件中编译,但是随后我无法使用System.load("SerialEMProject")
在eclipse中打开库,并给出错误java.lang.UnsatisfiedLinkError: Expecting an absolute path of the library
SerialEM.i
/* File: SerialEM.i */
%module SerialEMProject
%{
#include "SerialEM.h"
extern int testFIJI(int n);
%}
extern int testFIJI(int n);
%include "SerialEM.h"
SerialEM.cpp
...
mCamLowDoseParams[j][SEARCH_AREA].delayFactor = 0.05f;
}
}
int testFIJI(int a)
{
int para = a + 5;
return para;
}
void CSerialEMApp::InitializeOneLDParam(LowDoseParams &ldParam)
{
ldParam.magIndex = 0;
ldParam.camLenIndex = 0;
... file continues
SerialEM.h
// SerialEM.h : main header file for the SERIALEM application
//
#if !defined(AFX_SERIALEM_H__F084D61C_0A12_4CD1_AC1F_1AC785054FCE__INCLUDED_)
#define AFX_SERIALEM_H__F084D61C_0A12_4CD1_AC1F_1AC785054FCE__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
#define MAX_CAMERAS 6
#define MAX_DLG_CAMERAS 6
... file continues
我对接口文件的构建规则是: swig -c ++ -java -o $ {ProjDir)\ $ SerialEM_wrap.cxx SerialEM.i 输出:$(ProjDir)\ $ SerialEM_wrap.cxx
我使用v140 x64版本并尝试构建动态库。
我尝试遵循来自swig文档示例的这些说明来使用Java (http://www.swig.org/Doc4.0/Java.html#Java)
我禁用了SerialEM.cpp和SerialEM_wrap.cxx文件中的预编译头。在项目设置中,它们带有头文件stdafx.h
构建SerialEMProject时,出现错误
CPP #error "include 'stdafx.h' before including this file for PCH". Use the -cpperraswarn option to continue swig processing
在此行:
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
还有一个错误:
Syntax error - possibly a missing semicolon.
在线
void DLL_IM_EX SEMReportCOMError(_com_error E, CString inString, CString *outStr = NULL, bool skipErr = false);
DLL_IM_EX在stdafx.h中定义。
在此行之前添加#include“ stdafx.h”无济于事。都不放 进入接口文件。使用-cpperraswarn选项也无济于事。...
有什么想法可以通过这个吗?
谢谢!