2014-10-27 56 views
2

Scons版本是2.3.3。以下是构建脚本的相关部分:如何解决CheckLib返回false?

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

CheckLib始终返回一个错误值。我该如何调试?我通过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. 
+0

你怎么会有库路径集?应找到该库,通过您通过LIBPATH构造变量提供的库路径进行搜索。 – Brady 2014-10-28 06:27:05

+0

构建脚本长达数千行。我相信LIBPATH设置正确,但我无法确定。如果我不得不猜测,我会猜测链接器实际上是在找到这个库,但遇到链接错误(例如,将x86与x64连接)。我很想看看scons执行什么命令,以及执行CheckLib时遇到的错误(可能是链接错误)。 – 2014-10-28 14:06:24

回答

3

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

使用一个简单的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选项为:关于阅读SConscript文件,建设目标和进入目录

平静下来SCons的状态信息。为重建目标文件而执行的命令仍被打印。

+0

非常好! config.log坐在那里,我只是没有意识到它是一个scons文件。是的,它正是我所需要的。 – 2014-10-30 20:58:58

0

仰视--help后,我发现--debug选项有助于您的情况

scons --debug=findlibs blah blah 

的详细信息将显示在的config.log