OpenSUSE集成Drake时libclang相关编译错误求助
OpenSUSE Leap 15.4下Drake集成编译错误解决方案
问题背景
在OpenSUSE Leap 15.4环境中集成Drake(仓库为hedaniel7/Drake-OpenSUSE-Integration),执行以下命令后:
cmake .. -DWITH_USER_FMT:BOOLEAN=ON -DWITH_USER_SPDLOG:BOOLEAN=ON make install
出现编译错误:
RuntimeError: Library file /usr/lib/x86_64-linux-gnu/libclang-14.so does NOT exist
已尝试的无效操作
- 手动软链接libclang-14.so到
/usr/lib/x86_64-linux-gnu路径,触发clang_annotateTokens未定义符号错误; - 修改
libclang_setup.py指定本地libclang路径,导致stddef.h找不到的致命错误; - 自行编译clang-14.0.0,仍遭遇
stddef.h缺失问题; - 添加GCC头路径后,出现大量内置函数未声明错误;
- 指定libclang.so.15.0.7并设置
CPLUS_INCLUDE_PATH,引发Clang头文件与GCC兼容性错误。
有效解决方案
OpenSUSE Leap 15.4的库路径与Debian系发行版不同(64位库默认在/usr/lib64而非/usr/lib/x86_64-linux-gnu),且需通过官方包管理器安装匹配版本的clang组件,具体步骤如下:
- 安装clang14及依赖包
执行以下命令安装系统适配的clang14开发组件:
zypper install clang14 clang14-devel libclang14
- 配置环境变量
设置环境变量让编译过程找到正确的库和头文件:
export LD_LIBRARY_PATH=/usr/lib64/clang/14/lib:$LD_LIBRARY_PATH export CPLUS_INCLUDE_PATH=/usr/lib64/clang/14/include:$CPLUS_INCLUDE_PATH
- 带指定参数重新执行cmake
在cmake命令中明确指定libclang的库路径和头文件路径:
cmake .. -DWITH_USER_FMT:BOOLEAN=ON -DWITH_USER_SPDLOG:BOOLEAN=ON \ -DLIBCLANG_LIBRARY=/usr/lib64/libclang-14.so \ -DLIBCLANG_INCLUDE_DIR=/usr/lib64/clang/14/include
- 重新编译安装
执行编译安装命令:
make install
备选方案:修改libclang_setup.py路径
如果上述cmake参数方式无效,可直接修改项目中的libclang_setup.py:
- 将文件中所有
/usr/lib/x86_64-linux-gnu路径替换为/usr/lib64; - 确保指定的libclang版本为
libclang-14.so,并验证头文件路径指向/usr/lib64/clang/14/include; - 保存后重新执行
make install。
内容的提问来源于stack exchange,提问作者Daniel He
相关产品推荐
相关产品推荐

