2015-03-02 1 views
0

Я написал программу, и я хочу связать ее с другой программой c. В том смысле, с помощью включения или любой другой директивы мне нужно связать программы, так что последняя из них может быть вызвана функцией первого. Как я могу это сделать в кодовых курсах?Загрузка программы c в другую

+0

Оба не могут иметь функцию main(). – vvvv

+0

Кажется, что одна из ваших программ должна стать библиотекой (необходима редизайн). Но, может быть, вы говорите о межпроцессной коммуникации ... Уточняйте вопрос – VolAnd

+0

В принципе, предположим, что я написал программу A с функцией c. Теперь я пишу программу B. Теперь я хочу, чтобы программа A была включена или импортирована в программу B, чтобы я мог вызвать c и использовать ее результат в B.Он не включает отправку или получение, просто изменение в файлах заголовков, поэтому это не межпроцессное общение. – APD

ответ

3

Предположим, у вас есть две программы A и B. А в A у вас есть функция c. Итак, переместите c, чтобы разделить файл c.c и сделать файл c.h, который может быть включен в обе программы A и B как #include "c.h". Затем компилируйте A и B самостоятельно.

Это будет самый простой способ.

EDIT:

Все функции, которая использует один другой должен быть в "библиотеке". Например .:

// 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; 
} 

Все функции, которые вы планируете звонить из других файлов должны быть объявлены в час-файле. Это общий подход, но также можно найти множество советов в Интернете, таких как static функции, #define детективы и условная компиляция и т. Д.

+0

На самом деле, мне может понадобиться более 1 функции, и все функции связаны. Так что есть способ, которым я могу включить весь A в B. Также, как делаются «ch» файлы – APD

+0

@AnkitaPrasad: подумайте над тем, какую функцию следует вызывать извне и помещать свои объявления в h-файл ... см. Пример в ** edit **. Просто попробуйте прочитать сообщения компилятора и компоновщика – VolAnd

+0

Как создается файл с расширением .h? – APD

1

Это (загрузка программы C в другом) не может быть строгого контроля , поскольку в любой заданной программе есть только одна функция main. Однако функции system(3) & popen(3) позволяют запускать другую программу - через командную строку - с первой. В системах Linux и POSIX вы также можете запустить процесс, используя fork(2), и вы можете выполнить программу в process с использованием execve(2). Конечно, это зависит от операционной системы!

Однако в некоторых операционных системах и платформах, вы можете использовать dynamic linking загрузить некоторые plugin в выполнения. Загруженный плагин не a программа (у него нет функции main), но library.

Например, на Linux и POSIX системы, вы можете использовать функцию dlopen, чтобы загрузить плагин (часто некоторые shared library), а функция dlsym, чтобы получить символ внутри него.

В Linux dlopen загружает общий объект ELF, который должен содержать position-independent code.

PS. Вы также можете связать библиотеку (время сборки) с вашей программой.

Смежные вопросы