在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而不是...