Static libraries and headers in another directories with GCC

放肆的年华 提交于 2019-12-13 01:24:12

问题


I was looking here how to do static libraries using GCC, and the explanation is pretty clear (despise the fact I had to rewrite the factorial function): I have a function (fact.c), the header of the function (fact.h), and the main function (main.c), all of them in my home directory.

fact.h

int fact (int);

fact.c

int
fact (int f) {
  if ( f == 0 )
    return 1;
else
    return (f * fact ( f - 1 ));
}

main.c

#include <stdio.h>
#include "fact.h"
int main(int argc, char *argv[])
{
        printf("%d\n", fact(3));
        return 0;
}

So I had first to generate the object file (phase 1)...

$ gcc -c fact.c -o fact.o 

...then to generate the static library (phase 2)...

$ ar rcs libfact.a fact.o

...later to do the static library linking process (phase 3)...

$ gcc -static main.c -L. -lfact -o fact

...and finally run the program (phase 4 and final)

$ ./fact 

My question is the following. Let's suppose my program will be so big that I had no alternative than put the headers in a header directory (/include/fact.h) and the static libraries will also be in another directory (/lib/libfact.a). In that case, how the compilation and/or the code of this program will change?

Edit/Problem Solved: First, the main.c was corrected in order to include a header in another directory called include. Remember that, in this case, both of the .c files are in the main directory.

main.c

#include <stdio.h>
#include "include/fact.h"
int main(int argc, char *argv[])
{
        printf("%d\n", fact(3));
        return 0;
} 

Second, to generate the static library in another directory (phase 2), this is what I had done:

$ ar rcs lib/libfact.a fact.o

回答1:


Here is your answer,

$ gcc -static main.c -L. -lfact -o fact

-L Add directory to the list of directories to be searched for -l

Its in the link that you gave. If you put the seach direction correctly and low search range, it will not be a problem. Otherwise it is not going to compile the code. Because code did not know where is the header.




回答2:


You can add -I to specify include path(s).

gcc -I/include fact.c

gcc -I/include -static main.c -L/lib -lfact -o fact_main


来源:https://stackoverflow.com/questions/15906286/static-libraries-and-headers-in-another-directories-with-gcc

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