在另一个程序中加载c程序

时间:2015-03-02 06:24:57

标签: c include codeblocks

我已经编写了一个程序,我想将它链接到另一个c程序。从某种意义上说,通过使用include或任何其他指令,我需要链接程序,以便后者可以调用前者的函数。我怎样才能在代码插件中实现这一目标?

2 个答案:

答案 0 :(得分:3)

假设您现在有两个程序A和B.而在A中你有函数c。因此,将c移至单独的文件c.c并制作c.h文件,该文件可以作为#include "c.h"包含在A和B程序中。比独立编译A和B.

这将是最简单的方式。

修改

所有互相使用的功能都应该在“库”中。 E.g:

// c.h
int c(int x1, int x2); // this will be called from outside

extern int callCount; // to be available outside

// c.c
#include "c.h"

int d(int x); // this cannot be called from outside

// global variable to count calls of c function
int callCount = 0; 

int c(int x1, int x2)
{
    callCount++; // changing of global variable
    return (x1 + x2) * d(x1);
}

int d(int x)
{
    return x * x;
}

和用法

// prog A
#include <stdio.h>
#include "c.h"

int main(void) 
{
    int a = 1, b = 2;
    printf("c = %d\n", c(a, b));
    printf("c = %d\n", c(2*a, b - 1));
    printf("Function c was called %d times\n", callCount);
    return 0;
}

您计划从其他文件调用的所有函数都应在h文件中声明。这是常见的方法,但也可以在互联网上找到许多提示,例如static函数,#define侦探和条件编译等。

答案 1 :(得分:1)

它(在另一个程序中加载一个C程序)不能严格完成,因为在任何给定的程序中只有一个main函数。然而system(3)&amp; popen(3)函数使您能够从第一个程序启动另一个程序 - 通过命令行。在Linux和POSIX系统上,您还可以使用fork(2)启动流程,并且可以使用processexecve(2)中执行程序。当然这是特定于操作系统的!

但是,在某些操作系统和平台上,您可以使用dynamic linking运行时加载一些plugin。加载的插件一个程序(它没有任何main函数),但是library

例如,在Linux和POSIX系统上,您可以使用dlopen函数加载插件(通常是shared library})和dlsym函数来获取里面有一个符号。

在Linux上,dlopen正在加载ELF共享对象,该对象应包含position-independent code

PS。您还可以将库(在构建时)链接到您的程序。