我想根据头文件中的定义执行一些汇编指令。
让我们说05-19 17:56:27.213 9768-9768/com.emaarIt.app.Bernoulli E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.IllegalStateException: Activity has been destroyed
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1358)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:578)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:139)
at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:415)
at com.emaarIt.app.Bernoulli.activities.ProjectGalleryActivity.setSIAdapter(ProjectGalleryActivity.java:225)
at com.emaarIt.app.Bernoulli.webservice.modules.ProjectGalleryAsync.onPostExecute(ProjectGalleryAsync.java:78)
at com.emaarIt.app.Bernoulli.webservice.modules.ProjectGalleryAsync.onPostExecute(ProjectGalleryAsync.java:32)
at android.os.AsyncTask.finish(AsyncTask.java:602)
at android.os.AsyncTask.access$600(AsyncTask.java:156)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4441)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
我有test.h
。
在#define DEBUG
中,我想以某种方式检查test.asm
做某事......
这样的事情可能吗?我无法在类似问题或网上找到有用的东西。
答案 0 :(得分:5)
是的,您可以在asm文件上运行C预处理器。取决于您的构建环境如何执行此操作。例如,gcc
会自动为扩展名为.S
(资本)的文件运行它。请注意,无论您包含什么,都应该兼容asm。通常的做法是使用#ifndef ASSEMBLY
或类似的结构有条件地包含标题的一部分,因此您可以在同一标题中包含C和ASM部分。
答案 1 :(得分:4)
C预处理器只是一个输入数据(C源文件),转换数据并再次输出数据的程序(翻译单元)。
您可以像这样手动运行:
gcc -E < input > output
这意味着如果您愿意,可以在.txt文件或乳胶文件上运行C预处理器。
当然,困难的一点是如何将它集成到您的构建系统中。这在很大程度上取决于您使用的构建系统。如果涉及makefile,则为汇编程序文件创建目标:
assembler_file: input_1 input_2
gcc -E < $^ > $@
然后编译&#34; assembler_file&#34;以任何方式你通常编译它。
答案 2 :(得分:2)
当然但这不再是汇编语言,你需要通过一个C预处理器来提供它,它也知道这是一个混合的C / asm文件并执行c预处理部分但是没有尝试编译,然后它被提供给到汇编程序或内置自己的汇编程序。
可能,在很大程度上取决于你的工具链(支持与否),但IMO留下了非常糟糕的品味,YMMV。