arm64架构下使用std::string出现未定义符号错误求助
解决arm64架构下使用std::string引发的未定义符号链接错误
问题根源
你遇到的链接错误里的符号(std::__1::basic_string相关、std::terminate()、___gxx_personality_v0等)都属于C标准库(libc),出现这类错误的核心原因是用C编译器clang来链接C++目标文件,而C编译器不会自动链接C++标准库。
查看你的Makefile,链接生成最终可执行文件的步骤使用的是$(CC)(即clang):
$(BUILD_DIR)/$(TARGET_EXEC): $(OBJS) $(CC) $(OBJS) -o $@ $(LDFLAGS)
修复方案
将链接步骤的编译器替换为$(CXX)(即clang++),clang会自动处理C标准库的链接:
修改后的链接规则:
$(BUILD_DIR)/$(TARGET_EXEC): $(OBJS) $(CXX) $(OBJS) -o $@ $(LDFLAGS)
额外注意事项
- 不需要手动添加
-lstring这类选项,clang会自动链接正确的C标准库 - 你的fragment shader代码存在一处语法错误:输出变量定义为
vec4 position,但赋值时使用的是color,会导致着色器编译失败,需修正为:
layout(location = 0) out vec4 color;
内容的提问来源于stack exchange,提问作者SparkDev
相关产品推荐
相关产品推荐

