我的程序有两个C文件。其中一个是另一个使用的库。当我更改库并运行可执行文件时,它不使用新库。以下是代码。
main1.c
#include <stdio.h>
#include <unistd.h>
#include <stdbool.h>
#include "lib.c"
int main()
{
int x = 0;
while (true) {
printf("%dn", x);
sleep(1);
x = func(x);
}
return 1;
}
lib.c
int func(int x)
{
return x + 1;
}
我用这个命令编译库文件。
gcc -fPIC -MMD -shared -o libfunc.so -c lib.c
并使用此命令编译主文件。
gcc -fPIC -MMD -dynamic -L./ -lfunc main1.o
现在我将库文件更改为以下内容。
新建lib.c
int func(int x)
{
return x - 1;
}
我用这个命令再次编译它。
gcc -fPIC -MMD -shared -o libfunc.so -c lib.c
现在,当我运行二进制文件时,我仍然可以看到旧库的输出。如何更改GCC命令,以便二进制文件在想要运行时加载库文件?
$ ./a.out
1
2
^C
$
通过更改来声明函数,而不是包括实现
#include "lib.c"
至:
int func(int x);
然后你只需要构建库和二进制文件:
gcc -fPIC -shared libfunc.c -o libfunc.so
gcc main1.c -lfunc -o main1
并且运行它将报告:
0
1
2
...
为了证明它使用了新的库,请更改libfunc.c,使其增量为2,并仅按上述方式重建库。它现在将返回:
0
2
4
...
我有LD_LIBRARY_PATH=.
,所以它从当前目录中获取库。