我安装了 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 中,它给出了分段错误(核心转储)
我的链接有错误吗?