我正好遇到此完全相同的問題,以及谷歌搜索的解決方案在這個問題上來了,所以我會記錄我在這裏不可靠的解決方案:
在我得到了它通過使多會剛剛結束對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函數。 –