小编Sta*_*ine的帖子

如何在iOS应用程序中显示不在Unicode字符表中的自定义表情符号?

在网上搜索了几个小时后,我没有得到任何解决方案来解决以下问题:

我正在创建一个新的iOS应用程序,它能够在Unicode字符表中显示现有的表情符号.现在我也希望能够创建和显示自定义表情符号字符,但我应该如何使用Unicode映射?

是否可以使用Unicode在iOS应用程序中使用和显示自定义表情符号?我该怎么办呢?

iphone graphics unicode-string emoji ios5

8
推荐指数
1
解决办法
2289
查看次数

混乱的是ctime,time.h,sys / time.h

我希望一些顽固的Linux可以回答我在使用时间函数时应如何编写可移植(POSIX)代码。

  • 一些SO线程建议,在编写C ++代码时,包括ctime是正确的做法,而对于C代码,您仍将包括time.h。但是,它们都定义了相同的功能,尽管它们是在不同的命名空间中。从技术上讲,您应该可以同时指定两者。

  • 一位SO帖子建议应避免使用基于sys / *的内容。

  • ..虽然该线程暗示必须在包含sys / resources.h之前包含sys / time.h,尤其是对于基于BSD的平台。

  • 这篇文章说包含sys / time.h改善了可移植性。我认为发布者认为它允许您链接更多使用诸如gettimeofday之类的特定功能的第三方库。

  • 函数gettimeofday()气馁,现在正在享受弃用的状态,所以我应该使用clock_gettime()代替。这个clock_gettime()在time.h中定义,请参阅https://linux.die.net/man/3/clock_gettime ..

  • ..如果安装并与libavutil链接(例如,作为ffmpeg-dev的一部分),则可以很清楚地发现创建了time.h可以使人们发疯。Ffmpeg(和其他一些库)具有自己的time.h,甚至timeb.h。事实证明,如果构建堆栈中任何地方的任何.c或.cpp都包含一个 time.h,且包含路径包含多个有效条目(包括ffmpeg的条目),则它可能引用错误的条目,并且声明只需替换。@ FFmpeg,理由似乎是丑陋的骇客足以解决问题。我还没有那么幸运。而且,对所有源进行Php量化听起来根本不是一个解决方案。

  • 我的系统上的usr / include / i386-linux-gnu / bits中存在另一个time.h,因此这也不是仅限ffmpeg的现象。因此,简单地将usr / include / i386-linux-gnu称为include路径就变得很致命,这在引用系统include时很奇怪。

  • 我重写了我的CMake脚本,注意对大多数目标使用专用的include文件夹规范。我试过在整个代码库中引用的预编译标头中包含各种time.h / ctime和sys / time.h排列。我仍然收到类似的错误:

错误:字段“ st_atim”的类型“ timespec”不完整,结构timespec st_atim;

错误:尚未声明“ :: time”

等等..

因此,对于链接了许多第三方依赖关系的C ++安装程序,确保所有内容(包括time.h)保持编译的正确方法是什么?我应该将time.h include包含在我要编译到的特定平台上吗?我应该检查所有可能需要time.h的目标吗?前方摆着跳舞的大象和五彩纸屑。


更新:该问题似乎与C ++的版本有关,如下面的评论所暗示。从那以后,我已经将gcc从5.4更新到8.3.0,并且我放弃了在Linux上低于c ++ 11的较旧c ++兼容性的支持。在更新并重建了所有第3方软件包(包括ffmpeg)之后,我现在不再遇到我描述的问题,但这并不意味着它已被修复,因为它不会对其他人再次出现。实际上,我认为问题主要在于ffmpeg如何在较旧的编译器上进行编译,并且没有明确要求c ++ 11,因此我将其保留为开放状态。

c++ linux time cmake

6
推荐指数
1
解决办法
982
查看次数

git (ssh_exchange_identification) 连接被对等方重置 (windows, gitlab)

我正在尝试在 Windows (PuTTY) 上使用 ssh 连接到 gitlab 服务器(我没有权限)。我尝试过的 git 客户端包括简单的 git、git-extensions、sourcetree 和 git bash/gui。所有这些本质上都告诉我:

Cloning into 'repo'...
debug2: ssh_connect: needpriv 0
debug1: Connecting to git.server [x.y.z.w] port 22.
debug1: Connection established.
debug3: Incorrect RSA1 identifier
debug3: Could not load "/c/Users/user/.ssh/id_rsa" as a RSA1 public key
debug1: identity file /c/Users/user/.ssh/id_rsa type 1
debug1: identity file /c/Users/user/.ssh/id_rsa-cert type -1
debug1: identity file /c/Users/user/.ssh/id_dsa type -1
debug1: identity file /c/Users/user/.ssh/id_dsa-cert type -1
debug1: identity file /c/Users/user/.ssh/id_ecdsa type -1
debug1: identity file /c/Users/user/.ssh/id_ecdsa-cert type …
Run Code Online (Sandbox Code Playgroud)

windows ssh putty gitlab

5
推荐指数
1
解决办法
7305
查看次数

使用FFMPEG解码mp4 / mkv失败

我正在使用基于最新FFmpeg git源树的项目,并链接到Zeranoe在https://ffmpeg.zeranoe.com/builds/上发布的共享DLL。

播放代码工作并循环。它播放h265文件(原始),mpeg,avi和mpg文件。但是,一旦将mp4或mkv容器指定为输入文件,无论内部是什么,都会从编解码器中转储很多错误。不管是HEVC还是h264。

[h264 @ 00000000xyz] No start code is found
[h264 @ 00000000xyz] Error splitting the input into NAL units.
Run Code Online (Sandbox Code Playgroud)

为了使所有事情都变得真正奇怪,ffplay.exe会很好地播放这些文件。

我意识到我可以先将文件转换为原始格式来解决此问题,但我希望能够读取和解析mp4文件。由于我使用的是Zeraneo的预构建库,因此我猜想在构建过程中未启用某些功能,但是我希望ffplay也失败。我需要在format_context或codec_context中设置标志,还是提供某种过滤器标识符?

电影那部戏精从何而来http://bbb3d.renderfarming.net/download.htmlhttp://www.w6rz.net/http://www.sample-videos.com/

这些工作:

big_buck_bunny_480p_surround-fix.avi
bigbuckbunny_480x272.h265
Run Code Online (Sandbox Code Playgroud)

作为ffmpeg的新手,请帮助我了解问题出在哪里以及如何解决。如果预构建库是罪魁祸首,那么第二个问题是是否有人可以通过便捷的cmake设置来为Windows X64和x32调试和发布目标构建该库。

这是初始化ffmpeg以便阅读的来源

avdevice_register_all();
avfilter_register_all();
av_register_all();
avformat_network_init();
Run Code Online (Sandbox Code Playgroud)

格式解析如下:

m_FormatContext = avformat_alloc_context();
if (avformat_open_input(&m_FormatContext, file.GetPath().ToString().c_str(), NULL, NULL) != 0) 
{
    //std::cout << "failed to open input" << std::endl;
    success = false;
}
// find stream info
if (success)
{
    if (avformat_find_stream_info(m_FormatContext, NULL) < 0) 
    {
        //std::cout << …
Run Code Online (Sandbox Code Playgroud)

video mp4 ffmpeg decode

5
推荐指数
1
解决办法
4365
查看次数

CMake find_package 不处理多配置

我们使用 Jenkins 2.60.2 和 CMake 3.9.1 来自动化我们的构建系统。这对于多个版本的构建工具、架构和调试/发布目标都适用(如果所有配置都已构建并安装,那么调试发布都适用)。

使用find_package ()的仅调试配置通常会在发现时忽略CMAKE_BUILD_TYPE。脚本在内部搜索文件和库并将位置存储在变量中。在脚本末尾,将扫描变量中的_NOTFOUND字符串,这是在所有引用路径/提示中未找到文件或库的结果。因此,如果找不到 Release 库,find_package ()基本上会失败,并将整个包标记为未正确安装,即使构建仅对Debug目标严格感兴趣。

通常,XXXConfig.cmake文件使用对find_package_handle_standard_args (.. PATH_TO_LIB) 的调用来扫描库的路径变量中的_NOTFOUND字符串。这些变量通常通过早期调用find_library (PATH_TO_LIB libname ..)设置为_NOTFOUND。有关更多信息,我参考 CMake 文档。

用户确实可以用“debug”标记调试库并用“optimized”发布库,但这似乎在库发现期间没有帮助,并且仅在链接期间使用。

有人知道如何正确处理这个问题吗?

亲切的问候

c++ cmake jenkins multi-configuration

5
推荐指数
1
解决办法
2174
查看次数

GLSL:我可以在同一个着色器(pass)中组合MRT,ssbo和imageAtomic操作吗?

OpenGL中的2遍渲染系统使用的MRT着色器绑定到2个帧缓冲纹理tex1tex2.mrt传递的目标是计算场景中的透支并在聚集传递中将其渲染出来.我使用framebuffer纹理来传递结果.

它还有一个非常大的工作ssbo缓冲区(并使用固定的屏幕分辨率)并且需要很长时间才能链接,但我可以使用它来执行atomicAdds.我想要完成的是用uiimage2D上的imageAtomicAdd操作替换它,就像使用mrt pass一样.

问题是imageAtomicAdd的结果总是为零,我希望它会像atomicAdd那样上升.

#version 440 core

layout(early_fragment_tests) in;

// this works fine
layout (location = 0) out vec4 tex1;
layout (location = 1) out vec4 tex2;

// this works fine
layout(std430, binding = 3) buffer ssbo_data
{
        uint v[1024*768];
};

// this does not work at all.
uniform volatile layout(r32ui) uimage2D imgCounter;

out vec4 frag_colour;

void main () 
{       
    ivec2 coords = ivec2(gl_FragCoord.xy);
    uint addValue = 1u; …
Run Code Online (Sandbox Code Playgroud)

opengl shader glsl

5
推荐指数
1
解决办法
217
查看次数

重载运算符 () 而不是 [] 进行索引

()我正在重构的旧代码库有一种相当非正统的方法,通过重载运算符而不是运算符来访问 n 维向量[]

为了说明这一点,假设 Vec 是一个重载两个运算符的类,用于内部双精度列表的索引目的。

Vec v, w;
int index = 651;
double x = v(index);   // they index like this ..
double y = w[index];   // .. instead of like normally..
Run Code Online (Sandbox Code Playgroud)

我只能想到你这样做的一个充分理由:operator[]需要一个参数类型,size_t该类型可能取决于平台,也可能不uint64取决于平台。另一方面,代码中使用的索引类型主要是int,这意味着索引时需要进行大量隐式/显式类型转换。该代码的索引量非常大,所以我很犹豫是否要更改它。

这对于当今的现代编译器和 64 位平台真的有意义吗?我很快在https://godbolt.org/上进行了测试,您可以在这里尝试一下

我主要关注最新的 x64 gcc 和 Visual Studio 编译器,但在 x86-64 gcc (11.2) 中编译时会显示出差异。Gcccdqe()运算符添加了一条指令,我们知道这可能效率较低

我有点纳闷。为什么人们会做出这样的选择?

更新

正如答案中所解释的,我关于operator []被锁定到size_t字体大小的假设是不正确的。如果您使用索引int而不是uint64 …

c++ gcc operator-overloading visual-c++

4
推荐指数
1
解决办法
224
查看次数

segfault,但不在valgrind或gdb中

在我的项目中,有一个库,其代码可以使用Autodesk的FBX SDK 2017.1加载fbx.

在调试和发布中加载fbx崩溃.崩溃发生在两种不同的方式,似乎是随机的:

  • 崩溃要么只是"分段错误"(大部分时间)
  • 崩溃是可能涉及崩溃的所有库的转储,以及realloc()调用的问题.(每隔一段时间)从消息的上下文中,我无法确定可能的重新分配(消息之后是所有链接的lib的转储).

代码确实包含realloc()调用,特别是在FbxStream的自定义实现中使用的缓冲区分配中

对于Windows,大多数代码路径完全相同,只重新实现了许多特定于平台的部分.在Windows上,它按预期运行.

令我震惊的是,如果我在gdb或valgrind中运行程序,崩溃就会消失!所以我开始寻找未初始化的成员/价值观,但到目前为止我找不到任何可疑的东西.我使用了CppDepend/CppCheck和VS2012代码分析,但是在未初始化的变量/成员上都是空的

给出FBX加载的一些背景知识; FBX SDK有许多方法可以处理不同类型的资源(obj,3ds,fbx,..).它们可以从文件或流中加载.为了支持大文件,流选项是更相关的选项.下面的代码远非完美,但我目前最感兴趣的是valgrind/gdb不会崩溃的原因.我把SDK文档放在ReadString之上,因为它是最复杂的.

class MyFbxStream : public FbxStream{
    uint32 m_FormatID;
    uint32 m_Error;
    EState m_State;
    size_t m_Pos;
    size_t m_Size;
    const Engine::Buffer* const m_Buffer;
    MyFbxStream& operator = (const MyFbxStream& other) const;
public:
    MyFbxStream(const Engine::Buffer* const buffer) 
    : m_FormatID(0)
    , m_Error(0)
    , m_State(eClosed)
    , m_Pos(0)
    , m_Size(0)
    , m_Buffer(buffer) {};
    virtual ~MyFbxStream() {};
    virtual bool Open(void* pStreamData) {
        m_FormatID = *(uint32*)pStreamData;
        m_Pos = 0;
        m_State = eOpen;
        m_Size = m_Buffer->GetSize();
        return true;
    }
    virtual …
Run Code Online (Sandbox Code Playgroud)

c++ gdb valgrind segmentation-fault fbx

3
推荐指数
1
解决办法
946
查看次数