如何解决CheckLib返回false的问题?

时间:2014-10-27 19:31:59

标签: scons

Scons版本是2.3.3。以下是构建脚本的相关部分:

if not conf.CheckLib('portaudio'):
    raise Exception(
        'Did not find libportaudio.a, portaudio.lib, or the PortAudio-v19 development header files.')

CheckLib始终返回false值。我该如何调试?我通过Scons源代码跟踪它,直到它尝试构建一个小的测试程序,但后来我无法再跟踪它。

我尝试了section 27 of the Scons manual中建议的所有故障排除标志,但没有一个产生任何额外的输出。例如,

C:\code\github\mixxx2>scons -Q --debug=findlibs winlib=%WINLIB_PATH% qtdir=%WINL
IB_PATH%\build\qt-everywhere-opensource-src-4.8.6 hss1394=1 mediafoundation=1 op
us=0 build=%BUILD_TYPE% machine=%TARGET_MACHINE% toolchain=msvs virtualize=0 tes
t=1 sqlitedll=0 mssdk_dir=%MSSDK_DIR% force32=1

我不知道-Q选项的用途。我试过省略它并没有区别;我没有得到有关stdout的更多信息。就是这样:

[...truncated...]
Checking for C library portaudio... no
ERROR:root:Unmet dependency: Did not find libportaudio.a, portaudio.lib, or the
PortAudio-v19 development header files.

3 个答案:

答案 0 :(得分:3)

配置对象在执行其操作时会生成日志文件,默认情况下该文件为 config.log 。根据scons手册页的Configure Contexts部分,通过传递Configure参数初始化log_file对象时,可以自定义日志文件。

使用简单的SConstruct,我得到一个构建失败的config.log文件。

SConstruct:

env = Environment()
conf = Configure(env)    
if not conf.CheckLib('foo'):
    Exit('Can not find foo')

的config.log:

file /home/dbacher/Code/scons-test/SConstruct,line 2:
        Configure(confdir = .sconf_temp)
scons: Configure: Checking for C library foo... 
.sconf_temp/conftest_0.c <-
  |
  |
  |
  |int
  |main() {
  |  
  |return 0;
  |}
  |
gcc -o .sconf_temp/conftest_0.o -c .sconf_temp/conftest_0.c
gcc -o .sconf_temp/conftest_0 .sconf_temp/conftest_0.o -lfoo
/usr/bin/ld: cannot find -lfoo
collect2: ld returned 1 exit status
scons: Configure: no

我猜这个日志文件足以让你诊断问题。

BTW,scons手册将-Q选项描述为:

  

Quans SCons有关阅读SConscript文件,构建目标和输入目录的状态消息。仍会打印为重建目标文件而执行的命令。

答案 1 :(得分:0)

查找--help后,我发现--debug选项对你的情况很有帮助

scons --debug=findlibs    blah blah

详细信息显示在config.log

答案 2 :(得分:0)

我在构建中断后遇到了这个问题。删除 .sconf_temp/.sconsign.dblite 为我解决了这个问题。