问题描述
我安装了 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);
(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 (将#修改为@)