strncasecmp 和 strcasecmp 尚未声明

2023-11-21

我尝试在 Code::Blocks 中使用 MinGW 编译 Assimp,但出现以下错误。

\assimp-3.3.1\assimp-3.3.1\code\StringComparison.h||In function 'int Assimp::ASSIMP_stricmp(const char*, const char*)':|
\assimp-3.3.1\assimp-3.3.1\code\StringComparison.h|144|error: '::strcasecmp' has not been declared|
\assimp-3.3.1\assimp-3.3.1\code\StringComparison.h||In function 'int Assimp::ASSIMP_strincmp(const char*, const char*, unsigned int)':|
\assimp-3.3.1\assimp-3.3.1\code\StringComparison.h|193|error: '::strncasecmp' has not been declared|

在搜索时,我发现有问题的两个函数(strcasecmp 和 strncasecmp)实际上是在string.h它包含在标题中StringComparison.h。我也设法得到strings.h,它们最初所属的文件,但包括该文件也没有解决问题。

在搜索这个网站时,我发现我并不是唯一一个遇到这个问题的人。我发现的另一个解决方案建议使用定义语句,因为这些函数的名称可能略有不同,但这也没有帮助。


我刚刚遇到了这个完全相同的问题,这个问题是在谷歌搜索解决方案时出现的,所以我将在这里记录我的狡猾的解决方案:

最后,我通过对 Assimp 源代码进行多次小修改就成功了。解决字符串问题不足以使其正常工作,因为它在构建的后期会失败。我将在下面列出我所做的编辑。我建议一次制作一个,然后重建,以防万一您的设置出于某种原因不需要其中一些。请注意,由于最后一次编辑(对 Exporter.cpp),您无法使用此解决方案进行模型导出,如果您确实需要,则必须找出另一种方法来修复链接错误。

这不是一个干净的解决方案,它可能会被 Assimp 的未来版本取代,届时我将删除它。这是针对 assimp-3.3.1,使用 MinGW 构建的:

在 StringComparison.h 中,编辑ASSIMP_stricmp函数,注释掉除else#ifdef 子句:

/*#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 in 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 设置造成的,因为我禁用了几乎所有模型格式)。我通过注释掉定义来修复它gExporters并将其替换为:

Exporter::ExportFormatEntry* gExporters = 0;

此后它构建并运行良好。库文件放置在code文件夹。将 libassimp.dll.a 放在 lib 构建路径中,将 libassimp.dll 放在可执行文件的路径中。

当然,您也可以通过使用 VisualStudio 来实现它(我没有这样做,因为我懒得安装它)或在 Linux 上构建(我之前这样做过,并且第一次构建得很好,但我需要这样做Windows 端口)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

strncasecmp 和 strcasecmp 尚未声明 的相关文章

  • boost::multi_index_container 复合键中的 equal_range 与比较运算符

    我正在尝试从多索引容器查询结果 其中值类型是三个元素的结构 第一个值已给出 但第二个和第三个值必须大于或小于查询参数 经过搜索后 我发现必须实现自定义密钥提取器 并且这里的一些链接建议相同 但我无法实现它 boost multi index
  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud

随机推荐

  • 响应 JSON 对象还是 JSON.stringify?

    假设我想返回JSON内容 var content a foo b bar 返回 JSON 数据的最佳实践是什么 A 按原样返回对象 IEres end content B JSON stringify content 然后打电话JSON p
  • 将 JavaScript 'this' 转换为 jQuery '$(this)'

    请看一下下面的代码 div ul li li ul div
  • 如何直接将数组中的所有字符串大写?

    我学得很快 我一直在游乐场尝试这个 我不知道为什么这里的字符串没有大写 或者有没有其他方法可以直接将数组内的字符串大写 这是我的代码 var dogNames Sean fido Sarah Parker Walt abby Yang fo
  • 更好地解决多线程之谜?

    任务如下 我需要根据文件名锁定 最多可以有一百万个不同的文件名 这用于大规模基于磁盘的缓存 我想要低内存使用率和低查找时间 这意味着我需要一个 GC 锁定字典 字典中只能存在正在使用的锁 回调操作可能需要几分钟才能完成 因此全局锁定是不可接
  • 使用 jQuery 或纯 Javascript 访问 HTML 输入文本框数组

    我正在创建一个包含动态数量的输入文本框的表单 我希望每个文本框形成数组的一部分 理论上 这将使我更容易循环遍历它们 特别是因为我不知道最终存在的文本字段的数量 HTML 代码类似于 p Field 1 p
  • 具有自定义存储过程的 EF 6 代码优先

    我正在使用代码优先方法创建一个 MVC 5 应用程序 但我还在 SQL Server 数据库上创建了一些存储过程 有没有办法在创建数据库时在 C 中生成这些存储过程 也许通过执行sql 脚本 如果是这样我应该在哪里执行此操作 我会使用代码迁
  • 如何配置slurm通知邮件的内容?

    当某些类型的事件发生时 Slurm 可以使用以下选项通过电子邮件通知用户 mail type and mail user 我以这种方式收到的电子邮件包含一个空正文和一个如下所示的标题 SLURM Job id 9228 名称 toto 已结
  • 从 CSV 文件构建列表列表

    我有一个 Excel 文件 我将其导出为 csv 我想要解析该文件 但我在找到最佳方法时遇到了困难 csv 是我的网络中的计算机列表 以及每台计算机的本地管理员组中的帐户 我对元组做了类似的事情 但每台计算机的帐户数量范围从 1 到 30
  • 尝试将带有图像的表单发送到 PHP 服务器时 Android 中的内存泄漏

    我在这个文件中存在内存泄漏 我找不到确切的位置 但我认为是周围的图像 gt Bitmap bm BitmapFactory decodeFile filename 我尝试了很多不同的方法 但无法使其发挥作用 package prod veg
  • Python 多处理模块,Windows,通过创建新进程生成新的控制台窗口

    我对此做了一些研究 发现了一些类似的问题 但没有一个回答我真正想要的问题 我了解如何创建和使用流程multiprocessing模块 但是 当我创建一个新进程时 我想生成一个新的控制台窗口 仅用于该进程的使用 打印等 以便子进程不会共享父进
  • 在 WiX 中收获多个目录

    我正在尝试构建一个包含许多功能的安装程序 并且我正在使用heat收集每个功能的文件目录 我的源目录结构如下所示 HarvestDir FeatureA FeatureImpl dll FeatureImpl2 dll FeatureB Fe
  • 如何在 Swift 中实现 NSDocument 方法 -canCloseDocumentWithDelegate:shouldCloseSelector:contextInfo: ?

    在我的应用程序中 NSDocument子类关键任务硬件 用户真的不想意外关闭文档 所以 我已经实现了canCloseDocumentWithDelegate 显示一个NSAlert并在关门前询问 我现在正在尝试在用 Swift 编写的应用程
  • 在执行 Replace with jQuery 时可以忽略字符串中的 HTML 吗? [复制]

    这个问题在这里已经有答案了 可能的重复 替换字符串中的单词 但忽略 HTML 调用 Replace 时是否可以忽略 HTML 元素 示例代码 myText replace new RegExp searchString gi span cl
  • 字符数组是否需要调用delete[]与delete?

    我正在利用一位同事编写的库并发现valgrind正在吐出与以下相关的错误delete 问题是存在 char 数组的分配 例如 char s new char n 后来跟进delete s 代替delete s 他告诉我差别真的在于delet
  • SDL Tridion UI 2012 上的持续更新预览警报

    我正在尝试在某些测试 默认 页面上建立新的 SDL Tridion UI 2012 功能 尽管我多次单击 更新预览 但我不断检索 此页面的预览不是最新的 警报 我使用的是虚拟图像 因此除了我自己之外 其他任何人都无法编辑页面 不管哪个组件发
  • PHP 文本差异脚本

    您知道查找文本 diff 的好方法 脚本吗 您可以尝试使用PEAR Text Diff它提供基于文本的差异引擎并呈现多种差异输出格式
  • 如何检查UpdatePanel是否正在回发?

    有没有办法确定是否
  • 获取当前GCC异常模型

    g 是使用以下任一构建的DWARF2 sjlj or seh异常模型 MinGW 构建提供各种构建g 具有不同的异常模型 我希望能够确定gcc工具链正在使用什么异常模型 有没有g 将转储编译器默认异常模型的参数 Edit 最初 我正在测试中
  • 在 UIPageViewController 中禁用/启用滚动

    I got a viewController它继承自UIPageViewController interface PageScrollViewController UIPageViewController 现在我想知道如何启用和禁用滚动UI
  • strncasecmp 和 strcasecmp 尚未声明

    我尝试在 Code Blocks 中使用 MinGW 编译 Assimp 但出现以下错误 assimp 3 3 1 assimp 3 3 1 code StringComparison h In function int Assimp AS