我一直在努力解决我在与SCons合作时遇到的最小问题,但这种琐碎似乎并不像问题本身那样容易消失。
所以情况就是这样。
当我在XCode的一个系统库中的libpath末尾添加一个正斜杠时,我有一个完美编译的项目。
当我把它交给SCons时,它会有一些如何剥离并调用g ++ -out而没有斜杠。
当我手动使用g ++命令时,它会使用斜杠调用,它可以正常工作。
以下是帮助您理解的代码段。
这是附加库的代码:
env.AppendUnique(LIBPATH = [r'/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk/usr/lib/system/'])
正如你所看到的,我有一个斜线' usr / lib / system'。
这是SCons调用的g ++命令:
g++ -o output.dylib stuff.os -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk/usr/lib/system -otherstuff...
正如您所看到的,斜线在最后被绊倒。
所以,如果我这样做:
g++ -o output.dylib stuff.os -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk/usr/lib/system/ -otherstuff...
一切都很完美。
关于如何解决这个愚蠢的新手这个愚蠢问题的想法?
非常感谢你们提前!
答案 0 :(得分:2)
正如您所注意到的,SCons在构造link命令时对库路径做了一些解释。您可以通过LINKFLAGS
环境变量直接向link命令提供标志来解决此问题,绕过导致问题的路径LIBPATH
。
这使得SConstruct的可移植性稍差,因为您必须自己指定命令行选项。
SConstruct:
# SConstruct
libdir1 = '/Users/dave/lib1/'
libdir2 = '/Users/dave/lib2/'
env = Environment(LIBPATH = libdir1, LINKFLAGS = ['-L' + libdir2])
program = env.Program('test', 'test.c')
生成以下输出:
$ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o test.o -c test.c
gcc -o test -L/Users/dave/lib2/ test.o -L/Users/dave/lib1
scons: done building targets.
请注意, lib2 上的尾随空格已保留。
我不清楚为什么会发生这种错误,并且根本原因值得进一步调查。