【问题标题】:C Language - Call function from object fileC 语言 - 从目标文件调用函数
【发布时间】:2015-06-03 20:24:13
【问题描述】:

我在编译 Eclipse 项目时遇到了一点问题。 我有一个文件需要调用已编译文件(.o 文件)中存在的函数。

初始化.c

#include Init.h
void Init() {
    InitA();
    InitB();
    InitC();
    InitD();
}

初始化.h

extern void InitA();
extern void InitB();
extern void InitC();
extern void InitD();
void Init();

这4个函数都存在于目标文件motor_init.o中

我想知道是否可以调用这些函数以及如何调用。

【问题讨论】:

  • 是的。这是可能的。
  • 你知道我是怎么做到的吗?
  • @Neurchack 我没有使用 Eclipse 的经验(作为 Emacs/命令行人员),但我认为您可以使用链接器设置进行连接。如果没有,有 Eclipse 知识的人可以介入;)
  • 所以你认为这只是链接器的问题?
  • 一个初始化函数不好。五是可怕的。

标签: c function object


【解决方案1】:

是的,这就是 .o 文件的用途,包含函数。您已经定义了签名,所以您需要做的就是创建init.o 并将它们链接到您的最终产品中。

如果你使用 gcc 作为编译器:

gcc -c init.c
gcc init.o motor_init.o -o output

对不起,我不知道 eclipse 插件的细节。

另外,如果你有的话,我会推荐使用motor_init.h

【讨论】:

  • 我没有motor_init.h,所以我需要使用.o
  • 好吧,我做了你仍然需要 .o 文件,但这是要走的路,或者编写你自己的头文件。
  • 我正在使用 gcc 是的,但我也使用已经创建的 makefile。 .mk 的链接器部分是:# Linker $(build-exe-y): $(dep-y) $(obj-y) $(os-orti-y) $(sim-y) $(libitem-y) $(ldcmdfile-y) @echo @echo " >> LD $@" $(do-ld-pre) $(libitem-y) ifeq ($(CROSS_COMPILE)$(COMPILER),gcc) $(Q)$(CC) $(LDFLAGS) -Xlinker -Map=$(basename $(@F)).map -o $@ $(libpath-y) $(obj-y) $(lib-y) $(libitem-y) 我真的不知道如何更改它
  • 从看起来你应该在某处添加motor_init.o 给你$(lib-y) 变量。或者您可以在之后直接对其进行硬编码。
猜你喜欢
  • 2013-04-21
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多