如何在Eclipse中使用来自不同项目的函数?

时间:2013-11-20 17:05:38

标签: c eclipse project

我在eclipse中有2个C项目,每个项目都做一个特定的工作。(在一个项目中我有dataCatcherXML.c,在另一个项目中我有main.c

第一个从特定的xml代码中获取某些变量的值,另一个变量必须具有在XMLdataCatcher中获取的值。

每个人都在他们的特定项目中工作,但如果我在一个项目中合并两个文件(dataCatcherXML.c和main.c),它就不起作用。(我不知道为什么)

所以我决定在不同的项目中使用这些文件。

我的问题是如何在不同项目中共同使用这些功能?有可能吗?

dataCatcherXML.C(正如您在这里看到的,我正在考虑位错误的值,位错误是XML文件中的标记)

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <xmlmemory.h>
#include <parser.h>
#include <xmlstring.h>
#include "crc.h"

void XMLdataCatcher(int argc, char **argv) {

    xmlDocPtr doc;
    xmlNodePtr root;
    xmlNodePtr node;
    xmlNodePtr children;
    xmlNodePtr children2;

    doc = xmlParseFile("/home/practicante/XML/prueba1.xml");
    if (!doc) {
        printf("Error al cargar documento XML\n");
    }

    root = xmlDocGetRootElement(doc);
    node = root->xmlChildrenNode;
    while (node != NULL ) {
        children = node->xmlChildrenNode;
        while (children != NULL ) {
                   **//In this part I am taking the value of bit_error from the XML file**
            if (!(xmlStrcmp(node->name, "bit_error"))) {

                printf("%s: %s\n", node->name, xmlNodeGetContent(node));
                printf("%s\n", bit_error);
                strcpy(bit_error, xmlNodeGetContent(node));
                printf("%s\n", bit_error);
            }
            children2 = children->xmlChildrenNode;
            while (children2 != NULL ) {
                printf("%s: %s\n", children->name, xmlNodeGetContent(children));
                children2 = children2->next;
            }
            children = children->next;
        }
        node = node->next;
    }

    printf("bit_error2 = %d", 1);
}

main.c:

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <xmlmemory.h>
#include "crc.h"
#include <parser.h>
#include <xmlstring.h>

#define BIT_SINCRONIA 0X47
#define PID_PAT 0X00
#define table_pat 0x00

FILE *fp2;

int main() {

    unsigned short bit_error = 0; // **This part should be: unsigned short bit error = (the value taken in dataCatcherXML)**
    bit_error = bit_error << 15;
    unsigned short init_payload = 1;
    init_payload = init_payload << 14;
    unsigned short transport_priority = 0;
    transport_priority = transport_priority << 13;
    unsigned short PID = PID_PAT;

    PID = transport_priority ^ PID;
    PID = bit_error ^ PID;
    PID = PID ^ init_payload;

    unsigned short PID1 = PID >> 8;
    unsigned short PID2 = PID;

   ......... the rest of the code is irrelevant   
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

很难对这个问题给出一个明智的答案,但我会尝试一些变种。

简单的一个:只需将文件从一个项目复制(或链接)到另一个项目。如果发生任何变化,您需要记住在两个项目之间进行同步。

以Eclipse方式做到这一点:好吧,这个具有讽刺意味,但是如果你真的想这样做,就像Eclipse希望你这样做那么你可以试试这个。创建一个单独的项目。该项目仅包含此dataCatcherXML.c。这个项目应该编译成一个静态的(因为它比共享容易)库,比方说:datacarcherxml.a。在需要此库的其他项目中,您需要在datacatcherxml.a上设置依赖项并从其他项目添加库。如果您这样做,datacatcherxml将在需要时重建。嗯,这是一个小小的baroquesque,但你对IDE最初为Java设计的期望是什么? (好吧,这是一个小小的拖钓,很抱歉)。

老实说,对于Java项目来说它会这样,我不确定CDT插件。我只将Eclipse用于Java。我是老同学,我更喜欢用于C / C ++开发的配置良好的vim。