在scons'Program'命令中使用'LIBS'未能找到静态库,为什么?
问题描述:
我有一个 'NC' 为主要功能, 'OC' 为导入功能,如下图所示:在scons'Program'命令中使用'LIBS'未能找到静态库,为什么?
$ 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'])
我希望在这里编译oc并生成libo.a(OK),nc将使用这个'.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解释为使用动态链接共享库?
谢谢。
答
您还需要指定的路径在哪里搜索库,在这种情况下:
Program('n.c',LIBS=['o'], LIBPATH=['.'])
同时请参阅第4章“构建和使用库链接”我们UserGuide中,这不仅解释了如何要创建和使用库,它进一步指出,你从上面的声明“SCons解释LIBS使用动态链接共享库”显然是错误的。否则,目标文件将以*.os
而不是...