为什么scons会忽略我在SConscript中的CXXFlags

Why does scons ignore my CXXFlags in SConscript

问题

当命令"scons"在根目录下运行时,scons最终会运行命令"g++ -o bin/program bin/cpp/main.o",这会return错误:

"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) {

    ...

}

征兵

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

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

S构造

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

不要将 CXXFLAGS 用于 link 库。你应该这样做:

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