C++ 将SFML库与SCON构建链接

C++ 将SFML库与SCON构建链接,c++,compilation,scons,C++,Compilation,Scons,就我个人而言,我无法让SCON链接这些SFML库。我相信我遵守了scons网站关于图书馆链接的所有要求,因此我不知道该怎么做: import fnmatch import os #Setup environment file_match = "*.cpp" #Recursive Glob method to find all source files matches = [] for root, dirnames, filenames in os.walk("src/"): for

就我个人而言,我无法让SCON链接这些SFML库。我相信我遵守了scons网站关于图书馆链接的所有要求,因此我不知道该怎么做:

import fnmatch
import os

#Setup environment
file_match = "*.cpp"

#Recursive Glob method to find all source files
matches = []
for root, dirnames, filenames in os.walk("src/"):
    for filename in filenames:
        if fnmatch.fnmatch(filename, file_match):
            matches.append(os.path.join(root, filename))

#Compile the program
env = Environment();
env.Append(LIBS = ["sfml-graphics","sfml-window","sfml-system"]);
env.Append(LIBPATH = "/usr/local/lib");
env.Program(target = "Game", source = matches)

EDIT:显然,这段代码是有效的。看来我的电脑只需要休息几天就可以自我修复了。

请原谅这个愚蠢的问题,但是scons如何不链接SFML库呢?链接错误(可能您需要添加SFML所需的更多库,例如OpenGL+co)?运行时错误(可能您混合了调试/非调试、单线程/多线程库)?我正在尝试在SCON中模拟此()。但它会给出这样的消息:“未定义对sf::Window::Close()的引用”,您的SCons代码看起来是正确的。我们需要找出问题是出在SCON还是实际编译上,我怀疑是后者。正如@EugenConstantinDinca所建议的,您需要确保以正确的顺序列出所有必要的库。你正在使用哪个操作系统?他们提到了一个SFML_动态变量,看起来你没有定义它。另外,你可以发布由SCON生成的编译器命令吗。这对找到解决方案非常有帮助。您是否检查过使用的库是否正确。确保您不应该使用调试库或类似的东西。检查输出并查找链接器运行时链接的库。最后检查nm命令(输出链接器符号)在库中显示的符号是否与链接所抱怨的符号完全相同。如果这是错误的,那么调用约定等可能会有问题。