我有一个“n.c”作为主函数,“o.c”作为导入函数,如下所示:
$ cat n.c o.c
int f();
int main(){
f();
return 0;
}
#include<stdio.h>
int f(){
printf("hello\n");
return 2;
}
然后 scons 文件如下:
Library('o.c')
Program('n.c',LIBS=['o'])
我这里希望的是编译o.c并生成libo.a(OK),n.c将使用这个'.a'生成最终的可执行文件。所以我指定了 LIBS=['o'],希望它会指定一个归档文件来查找 libo.a 库。但:
$ scons -Q
gcc -o n n.o -lo
/usr/bin/ld: cannot find -lo
collect2: error: ld returned 1 exit status
scons: *** [n] Error 1
实际上,scons 将我的命令解释为“-lo”,即查找动态共享库。
这不是我想要的,因为在链接期间,存档像目标文件一样使用。 '-l' 是否适用于存档文件?为什么 scons 解释 LIBS 以使用动态链接共享库?
Thanks.
您还需要指定搜索库的路径,在本例中:
Program('n.c',LIBS=['o'], LIBPATH=['.'])
另请参阅我们的第 4 章“构建和链接库”用户指南,它不仅解释了如何创建和使用库,还进一步说明了您在上面的声明“SCons 解释 LIBS 以使用动态链接共享库”是完全错误的。否则目标文件将以*.os
反而...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)