无法为 Windows x86 构建 JAssimp.dll

Can't build JAssimp.dll for Windows x86

所以,我正在尝试进入 LWJGL,其中一部分是加载 3D 模型,我想我会为此使用 JAssimp。自述文件指定了两个步骤,构建本机组件和 .jar 组件。 jar 只是一个 ant build,所以它发生得很顺利。困难的部分是本地库。我一直在尝试 link 它,但没有成功。我已经包括了 assimp 包含目录,包括 Java 的 headers,并且 linked 到 JAssimp 的 assimp.lib。但是,我仍然收到这些错误:

jassimp.obj : error LNK2019: unresolved external symbol _aiImportFile referenced in function _Java_jassimp_Jassimp_aiImportFile@20
jassimp.obj : error LNK2019: unresolved external symbol _aiReleaseImport referenced in function _Java_jassimp_Jassimp_aiImportFile@20
jassimp.obj : error LNK2019: unresolved external symbol _aiGetErrorString referenced in function _Java_jassimp_Jassimp_aiImportFile@20
C:\Users\Kevin\Downloads\assimp-3.1.1-win-binaries\port\jassimp\jassimp-native\src\Release\Jassimp.dll : fatal error LNK1120: 3 unresolved externals

谷歌搜索导致大部分相同的问题,但没有答案,facepunch 上的一个人显然找到了解决方案,但提出了 https://xkcd.com/979/ 并且从未提及如何解决。显然,我错过了 link 到某个图书馆的机会,但我不确定 link 还能去哪里,Assimp 只提供了一个,我不确定我还需要什么。我安装错了吗?

对于遇到同样问题的任何其他人,答案是以老式的方式进行并自己编译 C++ Assimp。这会给你,(除其他外)一个新的 assimp.lib。 Link 使用这个而不是提供的那个,错误就会消失。

如何建造

I) buiid 主共享对象 libassimp.so:在 AssImp/assimp-3.2 中发出这些命令 一种。 cmake CMakeLists.txt -G 'Unix Makefiles' b.制作 C。结果 AssImp/assimp-3.2/lib

II) 通过在 jassimp-native/src 中发出此命令来构建本机库: 一种。 $ gcc jassimp.cpp -I/usr/lib/jvm/java-7-openjdk-amd64/include/ \ -I/usr/lib/jvm/java-7-openjdk-amd64/include/linux\ -I/$HOME/AssImp/assimp-3.2/包括\ -L/$HOME/AssImp/assimp-3.2/lib/libassimp.so -shared -fPIC -o libjassimp.so

libjassimp.so is required at runtime and must be located in java.library.path:
b. sudo cp /$HOME/AssImp/assimp-3.2/port/jassimp/jassimp-native/src/libjassimp.so   /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/

III) Java绑定 java 库是使用 ant 构建的。在 port/jassimp 中执行 "ant" 目录应该足以构建包括文档在内的库。 java 构建配置为创建 java 1.6 类

The Jassimp.jar file generated by the "ant" call has to be incorporated
in your build.xml file:

<target name="init">
   <property name="imports"      value="${libs}/jogl-all.jar:${libs}/gluegen-rt.jar:${libs}/jassimp.jar" />

<target name="compile" depends="prepare">
   <compilerarg line="-Xlint -cp ${imports}" />

以上都是好消息;我成功构建了我的代码。

坏消息是,在执行时我收到了以下错误: java: 符号查找错误: /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/libjassimp.so: 未定义的符号: aiImportFile