使用Flex编译简单程序时出现链接警告,寻求解决方法
Flex编译时macOS版本不匹配警告的解决办法
问题场景
我编写了一个简单的Flex程序,用于识别字符串hello world并输出Goodbye,程序代码如下:
%% "hello world" printf("Goodbye\n"); . ; %%
执行编译命令:
flex ex1.l gcc lex.yy.c -ll
编译时出现版本不匹配警告:
ld: warning: object file (/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/libl.a(libmain.o)) was built for newer macOS version (13.1) than being linked (13.0)
已尝试更新macOS到13.1、重新安装最新版Xcode,也试过执行CMAKE_OSX_DEPLOYMENT_TARGET 13.0强制指定部署版本,但警告依然存在。
解决办法
这个警告源于链接阶段的部署目标版本与libl.a中目标文件的编译版本不匹配,以下是有效解决步骤:
正确设置部署目标环境变量
直接在shell中导出匹配当前系统版本的环境变量,再执行编译:export MACOSX_DEPLOYMENT_TARGET=13.1 flex ex1.l gcc lex.yy.c -ll注意要将版本号设置为你当前的系统版本(13.1),而非更低版本。
直接通过gcc参数指定部署目标
如果环境变量设置无效,可以在编译命令中直接添加版本参数:flex ex1.l gcc lex.yy.c -ll -mmacosx-version-min=13.1同步Command Line Tools版本
确保Command Line Tools与当前系统/ Xcode版本匹配:# 重新安装Command Line Tools xcode-select --install # 切换到Xcode自带的开发者工具(若单独安装的CLT版本不匹配) sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
补充:
CMAKE_OSX_DEPLOYMENT_TARGET是CMake构建工具专用变量,直接在shell中赋值不会生效,而你当前使用的是原生gcc编译流程,因此该设置无效。
内容的提问来源于stack exchange,提问作者Array
相关产品推荐
相关产品推荐

