为什么scons会忽略SConscript中的CXXFlags

时间:2018-11-14 06:08:04

标签: c++ g++ scons

问题

在根目录中运行命令“ scons”时,scons最终将运行命令“ g ++ -o bin / program bin / cpp / main.o”,这将返回错误:

"undefined reference to 'dlopen', 'dlerror', 'dlsym', 'dlerror'"

这个未定义的参考问题可以通过'-ldl'编译参数来解决,但是由于某些原因,scons不会附加它。

如何获取scons以将'-ldl'参数添加到g ++命令。

项目设置

我的项目设置如下(为简化堆栈溢出目的而简化):

projectFolder/
 ├──bin/
 │  ├─cpp/
 │  └─Future Compiled Binary
 │
 ├──cpp/
 │  ├─SConscript
 │  └─main.cpp
 │
 └──SConstruct

main.cpp

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>

...

int main(void) {

    ...

}

SConscript

# C++
env = Environment()
env.Append(CXXFLAGS = '-ldl')
print env["CXXFLAGS"]

srcFiles = ['main.cpp']
env.Program('../program', srcFiles)

SConstruct

SConscript('cpp/SConscript', variant_dir='bin/cpp')

1 个答案:

答案 0 :(得分:2)

不要使用CXXFLAGS链接库。您应该这样做:

env.Program('../program', srcFiles, LIBS=['dl'])