问题标签 [abi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 如何处理:所选处理器不支持 `qadd16 r1,r1,r0'
我正在开发 android 应用程序,并且正在开发 NDK。编译文件时出现所选处理器的错误不支持 `qadd16 r1,r1,r0'。谁能解释我为什么这个错误出现在哪里以及如何处理这个错误?这是我的basic_op.h文件的代码片段
提前致谢
assembly - 为什么 Clang 在将 double 转换为 ulonglong 时会调用 %eip+1?
结果存储在哪里?我读到它通常是 %eax,但是 64 位 uint 太宽了。我也无法在堆栈中找到结果。
Clang 输入(已更新,签名现在对应于名称):
编译和反汇编(已更新,添加了重定位信息。现在使用 fixuns* d *fdi。):
主要程序(组装):
集会:
链接:
调试:
编辑:修复 C 函数中的签名,链接后显示反汇编。
剩下的问题:
- 为什么 unsigned int 6 在堆栈中不存在?
- 答案:它在 %eax 中。
android - armeabi 和 armeabi-v7a 的区别
据我从文档中可以看出,Android NDK 中两种支持的 ARM 架构风格之间的区别仅在于支持的 CPU 指令集。真的是这样吗?调用约定、系统调用顺序或其他方面没有区别吗?
我想知道如果我将模块编译为 ARM 目标文件(使用 NDK 以外的编译器 - 特别是 Free Pascal),将 ARMv6 指定为架构,然后将其链接到 armeabi 和 armeabi-v7a 共享库,会发生什么。FPC 位不应该既不执行系统调用也不执行 Java 调用,除非通过我自己的基于 C 的接口。
编辑:一个 hello world 库,使用 FPC for ARM 编译,链接并在 ARMv7a 模拟器下运行。
c - 关于 printf("%s", ...) 的法律论点的几个问题
我正在创建一个修改后的 printf 实现,但我不确定这些问题的答案。
零作为空字符串工作吗?(
printf("%s", 0)
允许吗?)我猜不是,因为 0 是一个
int
. 但是这会提示这个问题:NULL
可以作为空字符串工作吗?(printf("%s", NULL)
允许吗?)从逻辑上讲,我认为应该是的,因为
NULL
暗示了一个指针;但是很多实现似乎都有#define NULL 0
,所以我觉得在实践中可能没有。哪个是对的?指针类型是否必须指向
char
?(printf("%s", (void const *)"")
允许吗?)我的猜测是类型无关紧要,但我不确定。
c - Enum 如何在 C 上分配内存?
我正在尝试使用 C 和汇编(intelx8086)语言。
我也在使用一个由我的朋友实现的类。它有一个
我想按位使用这个类(AKA 在程序集中构造它/销毁它)。我的问题是,“枚举”需要多少内存?
c++ - 如何从 C++ 引发将触发脚本异常处理程序的异常
我一直在网上找到这个答案的点点滴滴,但不是一个清晰的解决方案。
这就是我想要做的。1) 创建一个 ATL 简单对象。2) 向该对象添加一个返回 BOOL 而不是 HRESULT 的方法。调用者想要真/假返回值。3) 向将提供 e.description 和 e.number 数据的 jscript 或 vbscript 调用者抛出异常。
RE 2) 我发现我可以使用 STDMETHODIMP_(BOOL) 和 [local] 来允许返回 BOOL RE 3) 我发现我可以通过 SetErrorInfo() 传递 IErrorInfo 来填充 Error 对象
我的困境是我无法弄清楚如何构建 C++ 以在 ABI 边界上抛出一个不会使调用者崩溃的异常。
debugging - 使用 GCC 检测 ABI 兼容性问题
我最近花了相当多的时间来跟踪一个问题,该问题是由编译一个库引起的-D_GLIBCXX_DEBUG
(它告诉 libstdc++ 使用带有额外检查的标准库的调试版本)但编译客户端程序时没有。这导致了 ABI 兼容性问题。
有什么方法可以用 GCC 自动检测这样的问题吗?Visual Studio 提供了我认为可以达到此目的的detect_mismatch
编译指示,但我不知道任何 GCC 等效项。GLIBCXX_3.4.9
GCC做了一些嵌入符号名称(mylib_debug_stl
例如使用那个符号真的很hacky。
或者,其他人如何避免这个问题?将库的检查版本构建为不同的名称或类似名称?
c++ - Visual Studio C++ dll 库在 Qt 应用程序中崩溃
我在 MS Visual C++ DLL 库和 Qt 程序之间共享“std::string”数据时遇到问题。
我拥有的是:
用 Visual C++ 2010 Express 编写的 DLL 库,它导出一种方法:
/li>抽象接口“ITest”和实现它的类:
/li>Qt GUI 应用程序需要:
/li>
在 DLL 的“Init”中,调用了“CTest::getVersion()”方法。我希望它会填充“&version”字符串。当我用新字符串填充“&version”时,我得到的是在线崩溃。
我已经做了什么:
从http://qt-project.org/downloads下载“Qt libraries 4.8.3 for Windows (VS 2010, 235 MB)” ,安装并在 QtCreator 的项目设置中选择它。
在 QtCreator 中,从 MinGW 工具链切换到安装了 MS Visual Studio 2010 Express 的工具链。
我认为它会克服这个问题,因为我使用的是用 VS 2010 编译的 Qt 库,而 Qt GUI 也是用 VS C++ 工具链编译的。不幸的是问题并没有消失,所以我尝试了最后一步:
在 Visual Studio 中创建 Win32 控制台应用程序,通过 LoadLibrary 加载我的 DLL,使用“Init”方法,就像我在 Qt GUI 中所做的一样......它工作了!!
小观察
在“CTest::getVersion()”中,我正在打印这个通过引用传递给控制台的“版本”字符串。当使用 VS C++ 控制台应用程序作为主机时,它会正确打印出来。使用 Qt 应用程序时 - 打印“版本”字符串周围有一些垃圾(例如┌►☻qwerty27)
这让我觉得 Qt 应用程序的 ABI 和我的 DLL 仍然不兼容,即使使用上面提到的 Qt VS 2010 库也是如此。
问题:
- 使用 Windows (VS 2010) 的 Qt 库和 Visual Studio 工具链不足以克服 ABI 兼容性问题吗?
- 这是否意味着我应该自己编译 Qt 框架?
- 请帮助 - 欢迎任何想法......
linux - Linux,在一台主机上编译一段代码,在另一台主机上运行?
代码是c/c++编写的,可能依赖于编译主机中的一些库;它应该在另一个没有库的主机上运行,具体取决于问题。两台主机都是linux,可能有不同的版本。你有好的策略吗?