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

g++链接xerces-c库时出现未定义符号错误求助

解决G++链接Xerces-C时的未定义符号错误

这个问题我之前碰到过,本质是编译器/运行时库不兼容导致的,咱们一步步拆解解决:

错误原因分析

你看到的这些__1cG__Crun开头的符号,是Sun/Oracle Studio编译器的C++运行时库(libCrun.so)特有的名字修饰符号,而你当前用的是GCC(g++)编译器——GCC依赖的是libstdc++标准库,名字修饰规则和Sun Studio完全不同,自然找不到这些专属符号。

这说明你安装的libxerces-c-3.2.so是用Sun Studio编译的,和你的代码编译环境(GCC)不匹配。

解决方法

方法一:用GCC重新编译Xerces-C库

这是最稳妥的方案,确保库和你的代码用同一套编译工具链:

  1. 下载Xerces-C 3.2的源码包(如果还未获取)
  2. 解压后进入源码目录,执行配置命令,明确指定用GCC作为编译工具:
    ./configure CC=gcc CXX=g++ --prefix=/export/home/ab0599/local
    
    这里--prefix保持你原来的安装路径,后续会替换掉旧的库文件。
  3. 编译并安装:
    make
    make install
    
  4. 重新执行你的编译命令,应该就能正常完成链接了。

方法二:切换到Sun Studio编译器编译你的代码

如果没法重新编译Xerces-C库,那只能用和库匹配的编译器来编译你的代码:

  • 用Sun Studio的CC命令代替g++,调整编译参数:
    CC -std=c++14 -m32 -I/export/home/ab0599/local/include -L/export/home/ab0599/local/lib xerces_tst1.cpp -o xerces_tst1 -lxerces-c-3.2
    
    注意Sun Studio的参数可能和GCC略有差异,比如-std=c++14可能需要换成-std=c++1y或者对应版本的参数,需要根据你的Sun Studio版本调整。

额外验证技巧

你可以用nm命令查看库的符号,确认它的编译环境:

nm /export/home/ab0599/local/lib/libxerces-c-3.2.so | grep "__1c"

如果输出大量类似的符号,就坐实了这个库是Sun Studio编译的;如果是GCC编译的,符号会以_Z开头(GCC的名字修饰前缀)。

内容的提问来源于stack exchange,提问作者Andrei Sibircevs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:02:34