使用符合 gcc 7.5.0

问题描述

我安装了 boost 1.73 静态库 (.a) 和 RHEL devtoolset-10,我执行以下步骤

scl enable devtoolset-10 bash 

检查 LD_LIBRARY_PATH 指向

/opt/rh/devtoolset-10/root/usr/lib64:/opt/rh/devtoolset-10/root/usr/lib:/opt/rh/devtoolset-10/root/usr/lib64/dyninst: /opt/rh/devtoolset-10/root/usr/lib/dyninst:/opt/rh/devtoolset-10/root/usr/lib64:/opt/rh/devtoolset-10/root/usr/lib

我将 CXX 和 CC 分别设置为 /opt/rh/devtoolset-10/root/bin/g++ 和 /opt/rh/devtoolset-10/root/bin/gcc

这是我的makefile的片段

LPATH  := -L/home/boost/lib/linux.2_6.x86_64 \
      -L/opt/rh/devtoolset-10/root/bin/ \
      -L/opt/rh/devtoolset-10/root/usr/lib/gcc/x86_64-redhat-linux/10 \
      -L/opt/rh/devtoolset-10/root/usr/lib64

LFLAG  := -lboost_filesystem -lboost_system -l:libstdc++.a -l:libgcc.a -static 
    
.PHONY: all clean

all: $(EXE)
    
$(EXE): $(BUILTOBJ)
    $(CXX) -DBOOST_NO_CXX11_ScopED_ENUMS -Xlinker -Map=rhel.map $(LPATH) -o $@ $(BUILTOBJ) $(LFLAG) 

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp 
    $(CXX) -DBOOST_NO_CXX11_ScopED_ENUMS $(INCLUDES) -c  $< -o $@   

$(OBJ_DIR)/%.o: %.c 
      mkdir -p $(@D)
    $(CC) $(INCLUDES) -c $< -o $@

在这三个地方发生分段错误..我得到了抛出错误的boost函数,这些是

boost::filesystem::path src(sourcepath);

src.filename()
for(boost::filesystem::directory_iterator file(src); file!=boost::filesystem::directory_iterator(); ++file)
boost::filesystem::remove_all(sourcepath);

也是我的 rhel.map 文件中的一个片段

(boost::filesystem::path::operator/=(boost::filesystem::path const&)) /opt/rh/devtoolset-10/root/usr/lib/gcc/x86_64-redhat-linux/10/libstdc++.a(bad_alloc.o) /home/boost/lib/linux.2_6.x86_64/libboost_filesystem.a(directory.o)(std::bad_alloc 的类型信息) /opt/rh/devtoolset-10/root/usr/lib/gcc/x86_64-redhat-linux/10/libstdc++.a(class_type_info.o) obj/Action.o(__cxxabiv1::__class_type_info 的 vtable) /opt/rh/devtoolset-10/root/usr/lib/gcc/x86_64-redhat-linux/10/libstdc++.a(del_op.o) /home/boost/lib/linux.2_6.x86_64/libboost_filesystem.a( exception.o) (操作符删除(void*)) /opt/rh/devtoolset-10/root/usr/lib/gcc/x86_64-redhat-linux/10/libstdc++.a(del_ops.o) obj/Action.o (operator delete(void*,unsigned long)) /opt/rh/devtoolset-10/root/usr/lib/gcc/x86_64-redhat-linux/10/libstdc++.a(del_opv.o) obj/CZip.o(操作符删除) /opt/rh/devtoolset-10/root/usr/lib/gcc/x86_64-redhat-linux/10/libstdc++.a(dyncast.o) obj/Action.o (__dynamic_cast) /opt/rh/devtoolset-10/root/usr/lib/gcc/x86_64-redhat-linux/10/libstdc++.a(eh_alloc.o) obj/Action.o (__cxa_allocate_exception)

另外,如果我使用 -g 标志,我会得到这个和类似的 DWARF 调试错误

DWARF 错误:在偏移 23b28 处找不到变量规范

代码在具有 gcc 9.3.1 的 ubuntu 中运行良好,但在带有 devtoolset 的 rhel-7 中它给出了分段错误(核心转储)

我的链接有问题吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)