undefined reference when including a header file

帅比萌擦擦* 提交于 2021-01-28 05:17:07

问题


I get an error when I include a header file, but not if I include the source file instead.

The function is defined in the source file like this:

/* in User.c */

struct User {
    const char* name;
};

struct User* addedUser(const char* name) {
    struct User* user = malloc(sizeof(struct User));
    user->name = name;
     return user;
}

And used like this:

/* in main.c */

int test_addedUser() {
    char* newName = "Fooface";
    struct User* newUser = addedUser(newName);
    assert(!strcmp(newName, newUser->name));
    return 0;
}

This works great. I am able to call test_addUser without a problem when I #include "User.c".

However, I would like to #include "User.h" instead, which is located in the same directory:

/* in User.h */

struct User {
    const char* name;
};

struct User* addedUser(const char*);

But, if I #include "User.h" instead of User.c, I get an error:

CMakeFiles/run_tests.dir/src/tests.c.o: In function `test_addedUser':
/home/rid/port/src/tests.c:(.text+0x4eb): undefined reference to `addedUser'

It seems strange to me that the reference works just fine when including the source file User.c but it is unable to reconcile User.h.

Any ideas why this might be?


回答1:


#include means that the file included is copied into the source file. So when you include your .c file, the function's code is here and it works. If you include only the header file, it's good thanks to that your functions will know each other, at least they will now they exist but they need their code to work together, so you need now to compile your two files.c together, not one by one. Maybe you're compiling by yourself :

gcc file1.c file2.c

Or with an IDE, you have to adjust the compiling options. If you want to compile the C files separatly, you have to compile them in object files (-c option with gcc), then link them.



来源:https://stackoverflow.com/questions/44212087/undefined-reference-when-including-a-header-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!