编译含Protobuf的PinTool时出现libprotobuf库加载错误求助
解决PinTool加载Protobuf库失败的问题
问题原因
Pin加载工具动态库时,系统动态链接器无法找到libprotobuf.so.17的路径——即便你已安装Protobuf且其他项目可用,因为Pin运行时可能不会自动继承当前环境的库搜索路径。
解决方案
1. 运行时临时指定库路径
在执行Pin命令前,显式设置LD_LIBRARY_PATH指向Protobuf库所在目录:
LD_LIBRARY_PATH=/path/to/protobuf/lib pin -t obj-intel64/tracerProto2.so -- /bin/ls
替换/path/to/protobuf/lib为实际的库路径,比如/usr/local/lib或你编译安装Protobuf时指定的lib目录。
2. 编译时嵌入库路径(永久解决)
修改makefile.rules中的链接命令,添加-Wl,-rpath参数,把Protobuf库路径嵌入到生成的PinTool动态库中:
$(OBJDIR)tracerProto$(PINTOOL_SUFFIX): $(OBJDIR)Source1$(OBJ_SUFFIX) trace.pb.h $(OBJDIR)Source2$(OBJ_SUFFIX) protoio.hh $(OBJDIR)Source3$(OBJ_SUFFIX) $(LINKER) $(TOOL_LDFLAGS_NOOPT) $(LINK_EXE)$@ $(^:%.h=) $(TOOL_LPATHS) -Wl,-rpath=/path/to/protobuf/lib $(TOOL_LIBS)
这样后续运行Pin命令时,无需再手动设置环境变量。
3. 验证库的正确性
- 用以下命令确认
libprotobuf.so.17的位置:find / -name libprotobuf.so.17 2>/dev/null - 确保该库是64位版本(对应Pin的
obj-intel64架构),可通过file /path/to/libprotobuf.so.17查看输出是否包含x86-64。
内容的提问来源于stack exchange,提问作者Tanawin Devaveja
相关产品推荐
相关产品推荐

