xav*_*uan 9 static portability scons static-libraries static-linking
我正在尝试让SCons创建一个共享库.进入的.so一个项目是.a静态库.
我有一句话:
env_2.SharedLibrary('libstuff.so', \
Split("""stuff.cxx mylib/libMine.a""")
Run Code Online (Sandbox Code Playgroud)
在运行它时,我收到此错误:
scons: *** Source file: mylib/libMine.a \
is static and is not compatible with shared target: libstuff.so
Run Code Online (Sandbox Code Playgroud)
但是,我知道共享库可以.a通过命令来制作,如:
g++ -m32 -shared -o libstuff.so stuff.o mylib/libMine.a
Run Code Online (Sandbox Code Playgroud)
任何关于让这个工作或任何变通方法的想法将不胜感激.
相关问题:如何让scons -shared在LINK命令行上添加一个额外的字符串进行Program()调用?如果我能做到这一点,我认为它会满足我的需求.
这个问题并不是 scons 特有的。要构建共享库,您需要使用位置无关代码 ( -fPIC) 编译的对象。最好的选择是使用正确的选项编译源文件来创建共享库。
在 SCons 中,您可以定义用于构建 libMine.a 和 libShared.so 的目标列表。
更新:对于你的第二个问题,SharedLibrary构建器可能会满足你的需要:
SharedLibrary('foo', ['f1.c', 'f2.c', 'f3.c'])
Run Code Online (Sandbox Code Playgroud)
如果没有,LINKFLAGS则设置传递给链接命令的标志。