1、用OSG开发的视景到底能不能发布成DLL;
2、如果能发布成DLL的话,我遇到的编译问题怎么解决。
由于我不太了解C++,所以,只能是艰难的进行试验,这两天我完成了以下步骤:
1、编译了OSG 3.0.0,通过CMD运行“osgViewer cow.osg”能够显示;
2、在VS2010中建立一个Win32控制台应用,能够正常运行(在这一步里面我了解了包含目录、库目录、依赖项目的相关问题)。代码如下
#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
int main( int argc, char **argv ){
osgViewer::Viewer viewer;
osg::Node *node = new osg::Node;
node = osgDB::readNodeFile("glider.osg");
viewer.setSceneData(node);
viewer.setUpViewInWindow(200, 200, 500, 500, 0);
viewer.realize();
return viewer.run();
}
3、建立了一个DLL工程,编译出的DLL提供的接口函数,能够在Java中通过JNA方式调用。
4、在上述工程中,添加如下接口函数(此函数的代码与Win32工程相同,包含目录、库目录、依赖项目设置与Win32工程相同),编译不能通过。
__declspec(dllexport) int showCow(int x, int y, int w,int h){
osgViewer::Viewer viewer;
osg::Node *node = new osg::Node;
node = osgDB::readNodeFile("glider.osg");
viewer.setSceneData(node);
viewer.setUpViewInWindow(x, y, w, h, 0);
viewer.realize();
return viewer.run();
}
编译错误提示如下:
1> 正在创建库 E:\OSG_LX\OSG_test\x64\Debug\Hello.lib 和对象 E:\OSG_LX\OSG_test\x64\Debug\Hello.exp
1>Hello.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __cdecl osgViewer::Viewer::`vbase destructor'(void)" (__imp_??_DViewer@osgViewer@@QEAAXXZ),该符号在函数 "int __cdecl showCow(int,int,int,int)" (?showCow@@YAHHHHH@Z) 中被引用
1>Hello.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: virtual int __cdecl osgViewer::Viewer::run(void)" (__imp_?run@Viewer@osgViewer@@UEAAHXZ),该符号在函数 "int __cdecl showCow(int,int,int,int)" (?showCow@@YAHHHHH@Z) 中被引用
与上述提示类似的共38个。