如何使用工具与SConstruct编译.dll = ['mingw']



这是SConstruct文件的内容:

#!python
import os
cppfiletodll = 'theone.cpp'
env = DefaultEnvironment()
env = Environment(tools = ['mingw'])
env['CXX'] = 'x86_64-w64-mingw32-g++'
Default(env.SharedLibrary('foo',cppfiletodll))

当使用$ scons运行时,它输出:

x86_64-w64-mingw32-g++ -o theone.o -c theone.cpp
x86_64-w64-mingw32-g++ -shared -o libfoo.so theone.o -Wl,--out-implib,libfoo.a

我得到的文件是:

theone.olibfoo.alibfoo.so

我需要一个适用于Windows的.dll,所以我像下面这样调整代码,它输出的不是.so库,而是.dll。这个.dll在Windows 10机器上运行,太棒了!

x86_64-w64-mingw32-g++ -o theone.o -c theone.cpp
x86_64-w64-mingw32-g++ -shared -o libfoo.dll theone.o -Wl,--out-implib,libfoo.a

TL;DR

所以在这里之前,一切都正常。但我希望这是自动化的。因此,我返回到SConstruct文件并添加.dll后缀,就像我对console command所做的那样。

#!python
import os
cppfiletodll = 'theone.cpp'
env = DefaultEnvironment()
env = Environment(tools = ['mingw'])
env['CXX'] = 'x86_64-w64-mingw32-g++'
Default(env.SharedLibrary('foo.dll',cppfiletodll))

但是这个SConstruct文件抛出一个错误

scons: *** A shared library should have exactly one target with the suffix: .so Target(s) are:libfoo.dll
File "/cppCompileTest/SConstruct", line 10, in <module>

环境:我正在使用Godot引擎开发一个GDNative C++项目。我的开发机器是Linux,Ubuntu 20.04.3 LTS。我可以在Godot引擎中使用这个.dll库,并成功地编译了适用于Windows 10的应用程序。此应用程序适用于Windows 10。我已经有了一个SConstruct文件,其中包含Linux的前缀、标志和导入库。我想在这个SConstruct文件中添加.dll编译,这样我就可以一键导出Linux和Windows的库。命令行允许我使用mingw编译.dll,但SConstruct没有。

以下是我的操作方法:

elif env["platform"] == "windows":
env["SHLIBSUFFIX"] = ".dll"

刚刚偶然发现了这个问题,幸运的是print(vars(env))给了我关于违规配置的详细信息!

相关内容

  • 没有找到相关文章

最新更新