我被困住了,我希望有人可以提供帮助,\n我正在尝试为 webasm 构建 h264lib_opencore 库,并且成功构建了它,我从这个庞大的库及其依赖项中分离出了我需要的功能,并构建了一个 .a通过 emmake make 或在 CLion 中设置工具链,它可以从 emscripten 工具链成功构建静态库 .a。
\n但是,我不\xe2\x80\x99t 认为函数已正确导出,因此我使用了该-s EXPORTED_FUNCTIONS命令,但不幸的是,即使我已经在我EMSCRIPTEN_KEEPALIVE尝试调用的函数中添加了 a ,但我还是得到了未定义的导出函数。\n并且该函数可以也可以在生成的 .a 文件中看到(通过十六进制编辑器)。\n但是当我执行emcc(或em++)操作时-s EXPORTED_FUNCTIONS,我收到错误 \xe2\x80\x9cundefined 导出函数\xe2\x80\x9d
我在这里还缺少什么?
\n我使用的命令:
\nem++ libH264lib_opencore.a -o H264lib_opencore.js -s EXPORTED_FUNCTIONS="['_h264_decoder_process_first_frame']"\nRun Code Online (Sandbox Code Playgroud)\n错误
\nem++: error: undefined exported function: "_h264_decoder_process_first_frame" [-Wundefined] [-Werror]\nRun Code Online (Sandbox Code Playgroud)\n如果我打开生成的 .a 库的十六进制编辑器,我可以看到该函数就在那里,尽管名称类似于
\n_ZN16h264lib_opencore32h264_decoder_process_first_frameEPvS0_iS0_iPiS1_i\nRun Code Online (Sandbox Code Playgroud)\n我 int EMSCRIPTEN_KEEPALIVE h264_decoder_process_first_frame()还在编译之前在源中添加了
我在这里缺少什么?
\n我正在更新以前使用自己的读写锁定机制的代码(此代码是在 C++11 之前编写的,并且 std::shared_mutex 尚不存在)以使用 C++ 的 std 版本。
有 ReadLock 和 WriteLock 两个类,可以通过调用方法将 ReadLock 升级为 WriteLock。WriteLock 也可以随时获取,无需从 shared_lock 升级。阅读 shared_lock 的 C++ std 版本,我认为它很简单。
ReadLock 将被 shared_lock 替换 WriteLock 将被 unique_lock 替换并且可以随时触发调用 lock() 来获取 Writelock 升级到 Writelock 将只分两步执行解锁 shared_lock 和锁定 unique_lock
我现在的问题是,当我阅读讨论时,可能会出现特定问题,并且像这样的线程引起了关注(来自 Howard Hinnant 的线程) std::shared_timed_mutex 上的共享锁可以升级为排他锁吗?
所以我考虑使用 boost 版本,因为它支持 upgrade_lock 和 boost::upgrade_to_unique_lock,但我对如何处理它的设计感到困惑。
WriteLock 类可以同时表示 unique_lock 和/或 upgrade_lock 和 upgrade_to_unique_lock 对象,因为正如我上面提到的,WriteLock 也可以在没有 shared_lock 的情况下实现。
另外,如果我使用 boost 中的 upgrade_lock,我对如何显式触发 lock() 和 unlock() 机制感到困惑;boost::upgrade_lock 有一个构造函数,它接受 defer_lock 作为参数,并具有我可以随时使用的 lock() 和 unlock() 方法,但是如果我们使用 …