我重新组织了一个现有项目的目录树,进行了相关的Sconscript更改,在此过程中,我介绍了以下链接器错误:
/bin/ ld :注意:在DSO /usr/lib64 64/libstdc++.so.6中定义了'__cxa_free_exception@@CXXABI_1.3‘,因此尝试将其添加到链接器命令行/usr/lib64 64/libstdc++.so.6:未能读取符号:无效操作collect2: collect2:ld返回一个退出状态
我找到了这个thread,如果我遵循这个建议并试图对系统库进行明确的说明,那么它就会启动整个系统库(随之而来的错误将是libm,等等)。
因为在没有我的重组的情况下,这是很好的编译,那么在不再链接到系统库的情况下,可以做些什么呢?
在现有的SConstruct/Sconscript文件集中,没有任何地方引用到针对任何系统库的链接。这是由scon自动完成的,但是现在我已经重新安排了几个子项目,我遇到了上面的错误。
libpath和rpath都包括以下内容:‘/usr/lib 64’、‘/usr/lib 64/mysql’、'/usr/local/lib',
链接器命令
gcc -o build/debug/icln/src/foo/fooCert/build/scons/fooCertFromFiles -Wl,-rpath=/usr/lib64 -Wl,-rpath=/usr/lib64/mysql -Wl,-rpath=/usr/local/lib -Wl,-rpath=/ws/build/debug/icmn/src/common -Wl,-rpath=../../../../engine/build/scons -Wl,-rpath=../../../../foo/build/scons -Wl,-rpath=../../../../kb/build/scons -Wl,-rpath=../../../../bar/build/scons -Wl,-rpath=../../../../tables/build/scons -Wl,-rpath=../../../../utils/build/scons -L/usr/lib64 -L/usr/lib64/mysql -L/usr/local/lib -Lbuild/debug/icmn/src/common -L/ws/icmn/src/common -Lbuild/debug/icln/src/engine/build/scons -Lsrc/engine/build/scons -Lbuild/debug/icln/src/foo/build/scons -Lsrc/foo/build/scons -Lbuild/debug/icln/src/kb/build/scons -Lsrc/kb/build/scons -Lbuild/debug/icln/src/bar/build/scons -Lsrc/bar/build/scons -Lbuild/debug/icln/src/tables/build/scons -Lsrc/tables/build/scons -Lbuild/debug/icln/src/utils/build/scons -Lsrc/utils/build/scons -lcengine -lbar -lfoo -lkb -lcutils -lCommon -ltables -lglog -lboost_date_time -lboost_serialization -lboost_system -lboost_filesystem -lmongoclient -lboost_thread -lpthread -lmysqlcppconn -lmysqlclient更新:我注意到构建最终二进制文件的调用是给gcc的,而不是g++。我仍在试图确定为什么它突然转向gcc而不是g++,但我认为这正朝着根本原因发展。
scons如何确定是否调用CC与CXX?
发布于 2015-03-02 20:08:28
解决了:因此,由于我执行了重新组织,对Glob()的调用解析为空列表,因为我已经将路径更改为源文件所在的位置。
修复:我需要更新Glob调用,以使用指向源的新路径( Sconscript和源文件不再像以前那样共存在同一个目录中)。
在此之前
source = Glob('*.cc')之后
source = Glob('../../src/*.cc')https://stackoverflow.com/questions/28816960
复制相似问题