如何在 .h 文件中组合汇编函数?
How to combine assembly functions in .h file?
可能是重复的,但我找不到问题的答案。
通常如果你想在一个主程序中导入来自不同 c 文件的多个函数 class,人们会制作一个 .h 文件并列出来自 .c 源的所有函数。
我的问题是,所有函数都写在.asm 文件中。我使用 extern void asmFunc(int i, char c);
在进一步的代码中使用该函数,但它们变得越来越多,我不想在我的 main.我怎样才能创建一个包含所有汇编函数的 library.h,这样我就可以在我的主要 class 的开头写 #include "library.h"
?
编辑:
我想我没有提供足够的具体信息:
- 我使用 MINGW gcc 和 NASM 来编译 c 和 asm 文件
- 我必须先将所有文件编译为 .o 才能匹配它们
- 我得到的第一个答案没有用,因为我的编译链有点复杂,这要归功于我对 Windows 的限制(我想要 Linux 返回)
看起来像这样:
我有一个包含三个文件夹的文件夹,这些文件夹具有类似库的独立结构:bwt(基本 window 工具包)、io 和 std(类似 strlen 的东西)
它们被编译成 bwt.o io.o 和 std.o.
现在我想为它们中的每一个制作一个 .h 文件,这样我就可以 #include "bwt.h"
在所有需要它们的内核 class 中。我如何让 gcc 意识到 bwt.h 中的所有函数都在 bwt.o 中定义?
您可以:
- 制作文件
- 将文件另存为
library.h
(与 C 文件相同的文件夹)
- 将您的外部声明*放入文件
- 在你的 C 文件中添加
#include "library.h"
#include
是字面上的 复制粘贴。你可以把一些代码放到另一个文件中,然后你可以 #include
那个文件,编译器会假装你直接把代码写在主文件中。这就是它的工作原理。
* 顺便说一下,声明函数时不需要写 extern
- 只需写变量。
既然你有一个 .o 文件,那么这些例程的源是汇编并不重要。只要您知道如何将它们作为 C 函数调用,那才是最重要的。
因此,将汇编函数的所有 extern
声明放在 library.h 中,然后 #include "library.h"
放在主文件中。然后你可以link他们。
gcc -c main.c
gcc -o program main.o asmfunctions.o
可能是重复的,但我找不到问题的答案。
通常如果你想在一个主程序中导入来自不同 c 文件的多个函数 class,人们会制作一个 .h 文件并列出来自 .c 源的所有函数。
我的问题是,所有函数都写在.asm 文件中。我使用 extern void asmFunc(int i, char c);
在进一步的代码中使用该函数,但它们变得越来越多,我不想在我的 main.我怎样才能创建一个包含所有汇编函数的 library.h,这样我就可以在我的主要 class 的开头写 #include "library.h"
?
编辑: 我想我没有提供足够的具体信息:
- 我使用 MINGW gcc 和 NASM 来编译 c 和 asm 文件
- 我必须先将所有文件编译为 .o 才能匹配它们
- 我得到的第一个答案没有用,因为我的编译链有点复杂,这要归功于我对 Windows 的限制(我想要 Linux 返回)
看起来像这样: 我有一个包含三个文件夹的文件夹,这些文件夹具有类似库的独立结构:bwt(基本 window 工具包)、io 和 std(类似 strlen 的东西) 它们被编译成 bwt.o io.o 和 std.o.
现在我想为它们中的每一个制作一个 .h 文件,这样我就可以 #include "bwt.h"
在所有需要它们的内核 class 中。我如何让 gcc 意识到 bwt.h 中的所有函数都在 bwt.o 中定义?
您可以:
- 制作文件
- 将文件另存为
library.h
(与 C 文件相同的文件夹) - 将您的外部声明*放入文件
- 在你的 C 文件中添加
#include "library.h"
#include
是字面上的 复制粘贴。你可以把一些代码放到另一个文件中,然后你可以 #include
那个文件,编译器会假装你直接把代码写在主文件中。这就是它的工作原理。
* 顺便说一下,声明函数时不需要写 extern
- 只需写变量。
既然你有一个 .o 文件,那么这些例程的源是汇编并不重要。只要您知道如何将它们作为 C 函数调用,那才是最重要的。
因此,将汇编函数的所有 extern
声明放在 library.h 中,然后 #include "library.h"
放在主文件中。然后你可以link他们。
gcc -c main.c
gcc -o program main.o asmfunctions.o