使用 Emscripten 导出所有函数

2024-02-27

我想通过 JavaScript 以简单的方式使用 C 源代码(仅使用免费/自由软件)。所以 Emscripten 似乎是一个不错的选择。https://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html https://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html

有一个导出一个函数的示例:

emcc tests/hello_function.cpp -o function.html -s EXPORTED_FUNCTIONS="['_int_sqrt']"

但有许多函数与 JavaScript 中的使用相关。此外,看来我必须添加更多内容来访问结构成员。从 emscripten 访问结构体字段 https://stackoverflow.com/questions/25346367/accessing-struct-fields-from-emscripten

所以,我想知道是否可以导出所有函数(除了 libc 的函数)而无需创建包含所有名称的大数组,即使这可能是 JS 大小问题和效率问题。

Regards.


导出所有函数的一种方法是使用-s LINKABLE=1 https://github.com/kripken/emscripten/blob/1.34.12/src/settings.js#L461 https://github.com/kripken/emscripten/blob/1.34.12/src/settings.js#L461 and -s EXPORT_ALL=1 https://github.com/kripken/emscripten/blob/1.34.12/src/settings.js#L385 https://github.com/kripken/emscripten/blob/1.34.12/src/settings.js#L385编译时的选项。

emcc tests/hello_function.cpp -o function.html -s LINKABLE=1 -s EXPORT_ALL=1

只是有-s EXPORT_ALL=1确实有效,但在我的系统上会出现以下警告:

warning: unresolved symbol: remquof
warning: unresolved symbol: ilogb
warning: unresolved symbol: nextafter
warning: unresolved symbol: remquo
warning: unresolved symbol: fesetround
warning: unresolved symbol: llvm_fma_f64

但是,这并不能完全满足您的需求,因为 libc 函数也会被导出。例如,您可以调用

Module.ccall('printf', 'number', ['string'], ['Passing a string from Javascript to C\n');

很好,它会将字符串发送到标准输出(默认情况下只是浏览器控制台)。


这个答案是基于@zakki的回答 https://stackoverflow.com/a/33206957/1319998.

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

使用 Emscripten 导出所有函数 的相关文章

  • 如何检测 JavaScript 中的哈希值后 URL 是否已更改

    如何在 JavaScript 中检查 URL 是否已更改 例如 像 GitHub 这样使用 AJAX 的网站将在 符号后附加页面信息 以创建唯一的 URL 而无需重新加载页面 检测此 URL 是否发生变化的最佳方法是什么 Is the on
  • 时差并在javascript中转换为小时和分钟

    我的时间值如下 开始时间如 09 00 00 结束时间如 10 00 00 这里不需要日期值 所以这个值需要计算差异并转换成小时和分钟 秒 我曾尝试过 var test new Date getTime startTime var test
  • 查找最近的城市,例如 oodle.com

    因此 我正在尝试开发一个显示用户列表的应用程序 该网站应该检测用户位置 我为此使用 maxmind api 然后显示用户位置 用户指定半径内的城市的列表 我该怎么做呢 MaxMind API 让我可以通过 IP 地址检测用户的城市 但如何找
  • 从 onclick 函数将方法发布到 URL

    我需要一些听起来很简单但对我来说很难的帮助 所以当有人点击这个 div 时 div Click Me div 我希望它将数据发送到 PHP 文件 该文件将获取我想要的信息 我会使用 GET 函数 但我听说它很容易被破解 如果他们是更简单的解
  • VueJS 在内联模板组件中重新编译 HTML

    我已经包装了 bootstrapTable https github com wenzhixin bootstrap table https github com wenzhixin bootstrap table 到指令中 如下所示 Vu
  • 如何检查 GAS 中是否存在文件(通过 id)

    我知道有关如何检查文件是否存在的问答by name using hasnext 不过我需要检查一下按文件 ID 最好没有高级 Drive API 披露 我写了一个基于错误处理的解决方案 function ifFileExists id tr
  • 如何从后端路由内的第三方API获取?

    尝试从第三方 url 获取 JSON 数据并将其带到我的后端路由 首先 我将查询字符串输入到应用程序的 url 中 并将它们存储到变量中 并在第三方 url 中使用它 尽管来自应用程序 url 的查询字符串已正确存储 但第二个和第三个查询字
  • Vite Vue 3 库构建并不隐式包含 dist/style.css

    我构建了一个库项目 Vue 3 Vite 我想通过以下方式将其包含在主机项目中package json 但我遇到了一个问题 我可以导入组件并使用这些导入的组件运行一个简单的程序 但它们的样式消失了 请让我知道我的配置有什么问题 当我必须手动
  • 产生 ENOENT node.js 错误

    我已经使用express generator启动了一个node js应用程序 我有一个奇怪的问题 我无法通过浏览器查看页面两次 第一次加载正常 第二次加载失败 因为节点进程以出现以下错误 GET 304 412ms events js 72
  • HTML5 下载属性不适用于 Mozilla [重复]

    这个问题在这里已经有答案了 a class download btn href https example com test pdf target blank Download a 我上面有简单的下载链接html5代码 它在 mozilla
  • 处理 Javascript 中的浮点精度[重复]

    这个问题在这里已经有答案了 我有大量数值y在 JavaScript 中 我想通过将它们四舍五入到最接近的倍数来对它们进行分组x并将结果转换为字符串 如何解决烦人的浮点精度 例如 0 2 0 4 0 6000000000000001 我尝试过
  • JavaScript 运行时错误:无法获取未定义或空引用的属性“msie”

    我只是尝试更改我的 jquery ui 对母版页的引用 我仅在 Internet Explorer 上收到上述错误 我在 Firefox 和 Chrome 上没有收到错误消息 这是抛出错误的 jquery 代码 return a brows
  • 检查一个元素是否包含特定的子元素

    我有很多div有时包含链接 我想检查他们是否有链接 这是我的尝试 var container this closest content find text Check if text contains a tags if container
  • AngularFire 0.9 解决了 UI 路由器问题

    我已按照教程进行操作here https www firebase com docs web libraries angular guide html section routes但不知何故犯了这个错误 Unknown provider c
  • toLocaleLowerCase() 和 toLowerCase() 之间的区别[重复]

    这个问题在这里已经有答案了 我试图fiddle http jsfiddle net xameeramir kr33b0aL with toLocaleLowerCase http www w3schools com jsref jsref
  • 从逗号分隔的字符串创建 html 表 javascript

    我正在尝试编写一个 Javascript 函数 该函数将文本写入 最终 创建以下 html 表 我将向它传递不同长度的参数以创建数百个表 table tr td u School u td td u Percent u td tr td S
  • 如何从 API 获取雅虎天气背景?

    我有一个天气小部件 我需要动态背景 雅虎有天气 API 但我无法找到与天气类型相关的背景图像 https weather yahoo com https weather yahoo com 这可能吗 var url http query y
  • 如何在 JavaScript 中对混合数字/字母数字数组进行排序

    我有一个混合数组 我需要按数字 字母表然后按数字排序 A1 A10 A11 A12 A3A A3B A3 A4 B10 B2 F1 1 2 F3 我如何将其排序为 1 2 A1 A2 A3 A3A A3B A4 A10 A11 A12 B2
  • screen.availHeight 和 window.height() 之间的区别

    我正在我的浏览器 Firefox 上执行以下 Javascript console debug 屏幕高度 屏幕可用高度 输出770 console debug 窗口高度 窗口 height 输出210 我也在使用 jQuery 两者有什么区
  • 如何将焦点设置到 django 表单元素的 CharField

    我的登录页面使用 Django 表单 I want to set focus to the first textField username when the page loads 我尝试使用 Jquery 如下 但没有得到结果 forms

随机推荐

  • 为什么弹性项目受限于父级尺寸?

    考虑以下示例 body margin 0 box sizing border box parent min height 100vh width 50vw margin 0 auto border 1px solid red display
  • 过滤传出 SignalR Core Hub 消息

    我正在使用 SignalR 和 Net 5 0 并利用集线器过滤器 https learn microsoft com en us aspnet core signalr hub filters view aspnetcore 5 0对我的
  • 如何使批处理文件删除它自己的目录?

    好吧 我很抱歉我对此很陌生 但我试图让我的批处理文件在启动后删除它自己的目录 这是我的文件夹的排列方式 Folder1 删除 bat 我的目标是让 delete bat 在启动 delete bat 后删除 Folder1 这是我的代码 r
  • 等待文件可写

    我正在开发一个将数据写入文件的工具 在某些时候 文件可能会被 锁定 并且在其他句柄关闭之前不可写入 我可以使用CreateFileAPI 处于循环状态 直到文件可用于写入访问 但我有两个问题使用CreateFile循环中 硬盘驱动器 缓存
  • 我们如何覆盖 navigator.getBattery()?

    我们正在编写一个 Chrome 扩展 当运行客户端代码的站点出于指纹识别原因检查电池电量时 该扩展会返回随机电池电量 站点可以使用的示例代码如下所示 navigator getBattery then function battery co
  • 使用实体框架 4.3 的过滤器加载导航属性

    几天前我放了一个question https stackoverflow com questions 11168505 auditing a table with ef code first关于映射两个类Message and Messag
  • 有效地使命令超时并将输出捕获到 bash 脚本中的变量

    我需要在 bash 脚本中运行一个命令 并在运行时间过长时终止它 我还需要捕获变量的所有输出 如果命令首先完成 我需要释放 终止看门狗进程 例如睡眠 因为我可能会运行此类命令的列表 不幸的是 超时 命令对我来说不可用 否则我可以这样做 ou
  • 如何以编程方式将 ViewController 转换为 UITableViewController

    我目前有一个MatchCenterViewController我想以编程方式将其转换为 UITableViewController 我尝试根据我找到的教程在下面这样做 但它似乎没有出现 MatchCenterViewController m
  • ASP.NET 表单身份验证 - 何时使用?

    我无法决定是否应该进行表单身份验证 表单身份验证通常用于个性化 即为已知用户定制内容 我没有这样的要求 我在数据库中有用户名和密码 需要根据数据库对用户进行身份验证吗 在 ASP NET 2 0 中实现相同目标的最佳推荐实践是什么 Form
  • Perl 相当于 PHP 的 get_file_contents()?

    下面的 PHP 代码正是我想要做的 问题是我需要在 Perl 中重新创建它 并且我一直在尝试open and sysopen Perl 可以运行 但不能执行 有人有任何帮助或知道任何可能有帮助的链接吗 谢谢 URL http example
  • UIWebView加载本地视频数据

    我正在尝试在 UIWebView 中加载视频 视频存储在本地文件系统中 这是我用于加载视频的代码片段 NSString filePAth NSBundle mainBundle pathForResource sample iPod ofT
  • EditText 中的 setHintTextColor()

    我的视图中有两个文本框 用户可以从同一屏幕上的另一个视图 通过对话框 选择文本颜色 因此 当用户通过对话框更改颜色时 我正在更改EditText文本及其提示 但是当有一些文本可用时EditText当用户选择其他颜色后 该文本将以该颜色出现
  • 使用 ngrok 进行隧道传输时如何获取请求的真实客户端 IP

    如何确保客户端IP地址被ngrok转发 由于 ngrok 我的测试代码一直坚持所有请求都来自 127 0 0 1 但我想记录实际的客户端 IP 负载均衡器通常在 X Forwarded For 或 x real ip 中设置标头 但我不确定
  • ICS 上的 TimePicker NullPointerException

    好吧 所以我刚刚切换了我的TimePickerDialog to a TimePicker由于客户需求 小部件在我正在处理的活动中直接可见 问题是当我按所述上的任何箭头时TimePicker 我得到一个 NullPointerExcepti
  • 从android中的通知栏启动应用程序

    我有一个应用程序 我想在我的应用程序运行时向通知栏显示我的应用程序图标 并且我还希望用户何时单击通知栏中存在的我的应用程序图标 我的应用程序将打开 这个怎么做 请帮忙 已接受的答案已被弃用 这是显示对话框的方法 来自谷歌文档 http de
  • 奇怪的空合并运算符自定义隐式转换行为

    注意 这似乎已修复Roslyn https github com dotnet roslyn 这个问题是在我写答案的时候出现的this one https stackoverflow com questions 6238074 它讨论了关联
  • Spring Boot 2 NoSuchMethodException:org.springframework.mobile.device.Device.()

    最近我尝试将 Spring Boot 应用程序版本从 1 5 10 RELEASE 更新到 2 0 0 RELEASE 项目环境 JDK版本1 8 Gradle 中的 jcenter 存储库 IDE Spring工具套件 STS 版本 3
  • Ember CLI - 在路线中使用 moment.js 时出错

    我已将 moment js 导入到我的项目中 它似乎在我的控制器中工作得很好 但由于某种原因它在我的路线中不起作用 控制器 controllers users js import Ember from ember export defaul
  • 如何在 numpy 中构造向量所有可能差异的矩阵

    我有一个一维数组 可以说 import numpy as np inp vec np array 1 2 3 现在 我想构造一个形式的矩阵 1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3 当然可以用for循环来完成
  • 使用 Emscripten 导出所有函数

    我想通过 JavaScript 以简单的方式使用 C 源代码 仅使用免费 自由软件 所以 Emscripten 似乎是一个不错的选择 https kripken github io emscripten site docs porting