OSX编译含Google re2库的C++代码遇C++版本支持错误求助
在OSX上使用Google re2库编译JNI代码时遇到C++版本不兼容问题
触发的错误信息:
/usr/local/Cellar/abseil/20240722.0/include/absl/base/policy_checks.h:79:2: error: "C++ versions less than C++14 are not supported."
我在构建用于JNI测试的极简HelloWorld代码时出现该错误,移除re2相关引用后代码可正常编译,但业务需求需要用re2做正则测试。
我的JNI代码如下:
#include "HelloWorldJNI.h" #include <iostream> #include <re2/re2.h> /* * Class: HelloWorldJNI * Method: sayHello * Signature: ()V */ JNIEXPORT void JNICALL HelloWorldJNI_sayHello (JNIEnv* env, jobject thisObject) { std::cout << "Hello from C++ !!" << std::endl; }
当前使用的g++版本信息:
➜ g++ --version Apple clang version 15.0.0 (clang-1500.3.9.4) Target: x86_64-apple-darwin23.5.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin
我已通过Homebrew重装过g++、gcc、abseil,但问题仍未解决。当前使用的编译命令:
g++ -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/darwin HelloWorldJNI.cpp -o HelloWorldJNI.o
解决方法
问题核心是编译命令未指定C标准版本,re2依赖的abseil库要求至少C14,而clang默认可能使用更低版本的标准。
- 修改编译命令,添加
-std=c++14或更高版本参数(如-std=c++17):g++ -c -fPIC -std=c++14 -I${JAVA_HOME}/include -I${JAVA_HOME}/include/darwin HelloWorldJNI.cpp -o HelloWorldJNI.o - 如果后续链接动态库时遇到同类问题,链接阶段同样需要加上
-std=c++14参数,并链接re2库:g++ -shared -std=c++14 HelloWorldJNI.o -lre2 -o libHelloWorldJNI.jnilib
额外说明
OSX上的g++实际是clang的别名,只需添加C++标准参数即可满足abseil的版本要求,无需重复重装工具。同时确保Homebrew安装的re2和abseil为最新版本,避免版本不兼容问题。
内容的提问来源于stack exchange,提问作者dpcllalala
相关产品推荐
相关产品推荐

