【发布时间】:2016-02-15 09:22:54
【问题描述】:
我正在尝试通过以下方式链接使用 SCons 创建的静态库:
//LIBSUFFIX and PREFIX are already set
env.Replace(LINKCOM = '$LINK $LINKOPTFILE $LINKMIXEDOPTIONS $LINKERR $LINKMAPFILE $SOURCES $LINKFILE $_LIBDIRFLAGS $_LIBFLAGS -o $TARGET')
env.Library('libraryname', ['file1.o','file2.o'])
env.Program(target = '', LIBS = 'libraryname', LIBPATH = 'path', source = Glob(*.c))
我的问题如下:在 LINKCOM 中,添加的库没有位置,例如:libraryname.a。此外,已包含在库中的文件也将传递给链接器命令(例如 SCons 无法识别我正在从它们创建库)
ex:我必须从以下来源创建一个程序:
main.c s1.c s2.c s3.c 和
库library_s.a 来自s1.o 和s2.o
.
SCons 传递的链接器命令:
linker.exe linkerflags s1.o s2.o s3.o library_s.a -o target.exe
如何将_LIBDIRFLAGS 中的每个目录与其对应的库连接起来,以及如何让 SCons 知道我正在从某些源文件创建库?
编辑:链接器命令应该是这样的:
'linker.exe' linkerflags s3.o pathtolibrary/library_s.a -o target.exe
备注:因为 library_s.a 是从 s1.o 和 s2.o 创建的,所以我希望 SCons 仅通过 s3.o 和库
【问题讨论】:
-
如果您删除带有“env.Replace(...)”的行,它会起作用吗?换句话说,SCons 的“智能链接方法”应该自动处理所有你想要的......为什么你必须用其他东西替换它?
-
这是因为我正在使用另一个编译器/链接器,这是我工具实现的一部分
-
那么输出应该是怎样的呢?仍然很难看出你在追求什么,因为在你显示的命令行和你在 SConstruct(s) 中所做的定义之间没有可见的链接......你没有显示环境设置的其余部分的外观喜欢。最后,您使用的是哪个链接器,是商业链接器吗?
-
我添加了链接器命令的外观