无法使用SWIG从C ++到Java构建大型项目

时间:2019-05-19 07:43:47

标签: java visual-studio-2015 swig

我对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选项也无济于事。...

有什么想法可以通过这个吗?

谢谢!

0 个答案:

没有答案