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

protobuf-c编译出现链接警告,如何修改构建脚本解决?

编译protobuf-c时的警告解决方法及脚本修改

原构建脚本

if [  -f ${PWD_PATH}/succeed/protobuf-c ]; then
    echo "git clone https://github.com/protobuf-c/protobuf-c.git"
    eval "git clone https://github.com/protobuf-c/protobuf-c.git"
    eval 'cd protobuf-c && git checkout v1.4.0 && ./autogen.sh && ./configure && make -j$(nproc) && sudo  make install'
    eval 'sudo ln -sf /usr/local/lib/libprotobuf-c.so.1.0.0 /usr/lib/libprotobuf-c.so.1'
    echo "done" > ${PWD_PATH}/succeed/protobuf-c
fi

echo
echo -e "${GREEN}[*] build protobuf-c succeed!${NC}"

编译时的警告信息(已翻译)

/usr/bin/mkdir -p '/usr/local/lib'
 /bin/bash ./libtool   --mode=install /usr/bin/install -c   protobuf-c/libprotobuf-c.la '/usr/local/lib'
libtool: install: /usr/bin/install -c protobuf-c/.libs/libprotobuf-c.so.1.0.0 /usr/local/lib/libprotobuf-c.so.1.0.0
libtool: install: (cd /usr/local/lib && { ln -s -f libprotobuf-c.so.1.0.0 libprotobuf-c.so.1 || { rm -f libprotobuf-c.so.1 && ln -s libprotobuf-c.so.1.0.0 libprotobuf-c.so.1; }; })
libtool: install: (cd /usr/local/lib && { ln -s -f libprotobuf-c.so.1.0.0 libprotobuf-c.so || { rm -f libprotobuf-c.so && ln -s libprotobuf-c.so.1.0.0 libprotobuf-c.so; }; })
libtool: install: /usr/bin/install -c protobuf-c/.libs/libprotobuf-c.lai /usr/local/lib/libprotobuf-c.la
libtool: install: /usr/bin/install -c protobuf-c/.libs/libprotobuf-c.a /usr/local/lib/libprotobuf-c.a
libtool: install: chmod 644 /usr/local/lib/libprotobuf-c.a
libtool: install: ranlib /usr/local/lib/libprotobuf-c.a
libtool: finish: PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/sbin" ldconfig -n /usr/local/lib
----------------------------------------------------------------------

库已安装至:
/usr/local/lib

如果你后续需要链接该目录下的已安装库,必须满足以下任一条件:

  • 使用libtool并指定库的完整路径;
  • 链接时使用-LLIBDIR参数,且同时满足以下至少一项:
    • 执行程序时将LIBDIR加入LD_LIBRARY_PATH环境变量
    • 链接时将LIBDIR加入LD_RUN_PATH环境变量
    • 使用链接器参数-Wl,-rpath -Wl,LIBDIR
    • 让系统管理员将LIBDIR添加至/etc/ld.so.conf

问题原因

警告的核心是/usr/local/lib不在系统动态链接器的默认搜索路径中,后续依赖该库的程序可能无法正常加载它。原脚本手动创建了/usr/lib下的软链接,但未处理动态链接器的配置逻辑,导致警告触发。

修改后的构建脚本

if [ ! -f ${PWD_PATH}/succeed/protobuf-c ]; then
    echo "git clone https://github.com/protobuf-c/protobuf-c.git"
    git clone https://github.com/protobuf-c/protobuf-c.git
    cd protobuf-c && git checkout v1.4.0 && ./autogen.sh && ./configure --libdir=/usr/lib && make -j$(nproc) && sudo make install
    sudo ldconfig
    echo "done" > ${PWD_PATH}/succeed/protobuf-c
    cd ..
fi

echo
echo -e "${GREEN}[*] build protobuf-c succeed!${NC}"

关键修改点说明

  • 修正条件判断逻辑:原脚本写反了判断条件,改为if [ ! -f ... ],仅在未安装过的情况下执行编译流程;
  • 移除冗余的eval调用,直接执行命令更简洁可靠;
  • 给configure添加--libdir=/usr/lib参数,将库直接安装到系统默认的动态链接搜索路径,无需手动创建软链接;
  • 添加sudo ldconfig命令,强制更新动态链接器缓存,让系统立即识别新安装的库,彻底消除警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:23:16