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
相关产品推荐
相关产品推荐

