You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 03:15:11