cod*_*ero 13 static portability build-system scons static-linking
在我的SConscript中,我有以下几行:
Program("xtest", Split("main.cpp"), LIBS="mylib fltk Xft Xinerama Xext X11 m")
Run Code Online (Sandbox Code Playgroud)
我如何让scons使用mylib.a而不是mylib.so,同时动态链接其他库?
编辑:希望尽可能少使用平台特定的黑客.
Ben*_*enG 14
传递包装在File节点中的完整文件路径将强制进行静态链接.例如:
lib = File('/usr/lib/libfoo.a')
Program('bar', 'main.c', LIBS = [lib])
Run Code Online (Sandbox Code Playgroud)
将生成以下链接器命令行
g++ -o bar main.o /usr/lib/libfoo.a
Run Code Online (Sandbox Code Playgroud)
请注意如何将"-l"标志传递给此LIBS条目的链接器.这有效地强制静态链接.另一种方法是修改LINKFLAGS以获得您想要的内容,但是您要绕过库依赖扫描程序 - 不会检查库的状态以进行重建.
要使此平台独立,请将env ['SHLIBSUFFIX']附加到要使用的库上.env ['SHLIBSUFFIX']为您提供共享库的此环境后缀.
您还有['SHLIBPREFIX'],['LIBPREFIX'],['LIBSUFFIX']和['PROGSUFFIX'],这些都适用于这种情况.
编辑:
我显然没有让自己理解,所以我会澄清.这些查找的返回值是平台使用的前/后缀的字符串.通过这种方式,您可以在每个平台上引用所需的文件.请注意,您不能将其用作纯字符串,必须将其嵌入为BennyG建议的文件节点.无论如何,使用节点是最好的解决方案,因为文件节点比字符串更通用.
希望这可以帮助.
归档时间: |
|
查看次数: |
8743 次 |
最近记录: |