使用库时,哪些代码进入最终可执行文件?
例如,我们有两个文件:

/*main.c*/
int main (int argc, char* argv[]){
    fc(1); /*This function is defined in fc.c*/
}

另一个文件:
/*fc.c*/
int fc(int x){
    return fe(x);
}
int fe(int y){
    return y + 1;
}

我们编译fc.c:
合同通用条款-合同专用条款
然后我们得到指挥官。
现在,让我们构建一个名为test的库:
ar rcs libtest.a fc.o公司
我们现在有libtest.a。
现在我们编译main.c
gcc-c主c
我们得到main.o
让我们把main.o链接到libtest.a
海合会-L.main.o-ltest
我们得到想要的a
检查它的符号:
nm a.输出
在所有符号之间,我们发现:
080483立方英尺
080483df铁
看起来不错。
但是!
如果我们的主c换成这个?
/*main.c*/
int main (int argc, char* argv[]){
    fe(1); /*This function is defined in fc.c*/
}

在编译main.c并将新的main.o链接到我们的库之后,我仍然会找到fc的符号。但我不需要那个密码。
问题
-难道图书馆不应该只给我main.c中需要的代码吗?
-函数在添加到库之前是否需要在单独的模块中?
-如果我有300个功能呢?我需要做300个模块吗?

最佳答案

是的,将每个功能放在一个单独的模块中。这样链接器将只链接所需的项目。

关于c - C静态库如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34638437/

10-11 22:09
查看更多