2

我安装了 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::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 (vtable for __cxxabiv1::__class_type_info) /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) (operator delete(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 中,它给出了分段错误(核心转储)

我的链接有错误吗?

4

0 回答 0