我在.s文件中有几行汇编程序arm代码。我只需要打几个电话。当为设备构建时,它工作得很好,但是当我切换到iPhone模拟器时,我会得到“没有这样的指令”错误。我尝试有条件地编译.s文件的部分内容:
#if !TARGET_IPHONE_SIMULATOR但是汇编程序不识别这些预处理器指令(当然),也不识别我能记住或找到工作的汇编程序的任何条件编译技术,所以我现在绞尽脑汁在为模拟器构建时如何避免编译那个汇编程序代码。我在Xcode中也看不到一个项目选项,它允许我根据目标平台编译文件或不编译文件。
解决:
我所缺少的只是汇编程序文件中正确的#导入。我没有考虑添加它,因为Xcode语法用绿色(注释)突出显示了任何预处理器指令,这让我假设这些命令实际上工作得很好,却不被识别。
这样做是可行的:
#import "TargetConditionals.h"
#if !TARGET_IPHONE_SIMULATOR
... asm code here ...
#endif发布于 2009-11-10 18:01:25
你用一个预处理器宏来做。它们是在TargetConditionals.h TARGET_IPHONE_SIMULATOR中定义的!(不过,您确实需要将它包括在内。)
发布于 2011-05-30 21:51:28
下面是我用来检测手臂和拇指对模拟器的代码:
#include "TargetConditionals.h"
#if defined(__arm__)
# if defined(__thumb__)
# define COMPILE_ARM_THUMB_ASM 1
# else
# define COMPILE_ARM_ASM 1
# endif
#endif
#if TARGET_IPHONE_SIMULATOR
// Simulator defines
#else
// ARM or Thumb mode defines
#endif//以下是如何使用它
uint32_t
test_compare_shifted_operand(uint32_t w1) {
uint32_t local;
#if defined(COMPILE_ARM_ASM)
const uint32_t shifted = (1 << 8);
__asm__ __volatile__ (
"mov %[w2], #1\n\t"
"cmp %[w2], %[w1], lsr #8\n\t"
"moveq %[w2], #10\n\t"
"movne %[w2], #11\n\t"
: \
[w1] "+l" (w1),
[w2] "+l" (local)
: \
[shifted] "l" (shifted)
);
#else // COMPILE_ARM_ASM
if ((w1 >> 8) == 1) {
local = 10;
} else {
local = 11;
}
#endif // COMPILE_ARM_ASM
return local;
}https://stackoverflow.com/questions/1709850
复制相似问题