我正好遇到此完全相同的问题,以及谷歌搜索的解决方案在这个问题上来了,所以我会记录我在这里不可靠的解决方案:
在我得到了它通过使多会刚刚结束对Assimp源代码的小编辑。解决字符串问题不足以让它工作,因为它在构建中稍后会失败。我将列出我在下面所做的编辑。我建议一次制作一个,然后重新构建,以防出于某种原因与您的设置,其中一些不是必需的。请注意,如果您确实需要您必须找出解决链接错误的其他方法,则无法使用此解决方案进行模型导出,因为上次编辑(至Exporter.cpp)。
这不是一个干净的解决方案,它可能会被未来版本的Assimp取代,在这一点上,我将删除它。这是assimp-3.3.1,使用MinGW建:
在StringComparison.h,编辑ASSIMP_stricmp
功能,注释掉以外的所有的#ifdef的else
条款:
/*#if (defined _MSC_VER)
return ::_stricmp(s1,s2);
#elif defined(__GNUC__)
return ::strcasecmp(s1,s2);
#else*/
char c1, c2;
do {
c1 = tolower(*s1++);
c2 = tolower(*s2++);
}
while (c1 && (c1 == c2));
return c1 - c2;
//#endif
做类似的事情在ASSIMP_strincmp
。
接下来,它抛出了一个关于::_fullpath
在DefaultIOSystem.cpp
错误。我的“修复”,这只是使用注释掉的一切其他在此功能的后备选项:
ai_assert(in && _out);
// char* ret;
//#if defined(_MSC_VER) || defined(__MINGW32__)
// ret = ::_fullpath(_out, in, PATHLIMIT);
//#else
// use realpath
// ret = realpath(in, _out);
//#endif
// if(!ret) {
// preserve the input path, maybe someone else is able to fix
// the path before it is accessed (e.g. our file system filter)
// DefaultLogger::get()->warn("Invalid path: "+std::string(in));
strcpy(_out,in);
// }
也抱怨的snprintf是不确定的。编辑StringUtils.h
更改以下的#define snprintf的前添加下划线:
# define ai_snprintf _snprintf
还有约:: ATOF没有被定义的错误。您可以通过添加
#include <cstdlib>
到StringUtils.h
解决这个问题这应该得到它的建设,但会有一个链接错误Exporter.cpp
(这可能是由于我的特殊的CMake setttings因为我禁用几乎所有模型格式)。我固定它通过注释掉的gExporters
的定义以及与此替换它:
Exporter::ExportFormatEntry* gExporters = 0;
此之后,它建立并运行良好。库文件被放置在code
文件夹中。将libassimp.dll.a放在lib构建路径和libassimp中。在你的可执行文件的路径中。当然,你也可以通过使用VisualStudio来代替它(我没有,因为我不能打扰它的安装),或者通过在Linux上构建(我之前做过,它先构建好了,但是,我需要做一个Windows端口)。
他们不是在标准C头'string.h',因为它们不是标准C功能。 – juanchopanza
您确定,您在代码中包含了“#include”。 –
您可能正在查看具有这些字符串函数的Msys头文件。 mingw32环境没有这些POSIX函数。 –