这是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.o
libfoo.a
libfoo.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))
给了我关于违规配置的详细信息!