【问题标题】:Compiling PIN tool with dependencies使用依赖项编译 PIN 工具
【发布时间】:2016-08-27 14:42:30
【问题描述】:

正如标题所述,我正在寻找一种方法来编译我的 PIN 工具并附带一些依赖项。例如,如果我在我的 PIN 工具中#include "somefile.h",并生成一些目标文件g++ -c somefile.cpp,我如何链接我的目标文件以使用我的 PIN 工具进行编译,以便我可以在我的 PIN 工具中使用它的功能?

【问题讨论】:

  • 请注意,目标文件必须使用与 Pin 本身相同的运行时进行编译。我建议您查看一些 Pin 工具包 makefile 以了解 obj 文件是如何生成的,并在您的 Pintool makefile 中添加类似的行。

标签: c++ linux g++ intel-pin


【解决方案1】:

您需要在“makefile.rules”末尾添加一条新规则:

$(OBJDIR)YourPinToolMainFile$(PINTOOL_SUFFIX): $(OBJDIR)YourPinToolMainFile$(OBJ_SUFFIX) $(OBJDIR)somefile$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)

【讨论】:

  • 我按照您的指示编译成功,但是当我运行 Pintool 时,链接错误如下:- dlopen failed: cannot locate symbol "_ZN5CacheC2Ev" referenced by... 有什么建议吗??跨度>
【解决方案2】:

所以我能够在 PIN 的网站 here 下找到一些关于更改“makefile.rules”的文档。对于我的情况,下面这 6 行将被添加到“makefile.rules”的末尾。

$(OBJDIR)"somefile"$(OBJ_SUFFIX): "somefile".cpp "somefile".h
    $(CXX) $(TOOL_CXXFLAGS) $(COMP_OBJ)$@ $<

$(OBJDIR)"PinFile"$(OBJ_SUFFIX): "pin_tool".cpp
    $(CXX) $(TOOL_CXXFLAGS) $(COMP_OBJ)$@ $<

$(OBJDIR)"pin_tool"$(PINTOOL_SUFFIX): $(OBJDIR)"somefile"$(OBJ_SUFFIX) $(OBJDIR)"PinFile"$(OBJ_SUFFIX) "somefile".h
    $(LINKER) $(TOOL_LDFLAGS_NOOPT) $(LINK_EXE)$@ $(^:%.h=) $(TOOL_LPATHS) $(TOOL_LIBS)

唯一会从一个 make 文件更改为另一个的就是我放在引号中的单词。请注意,引用的单词在实际的“makefile.rules”中不应有引号

【讨论】:

  • 对于那些在这个答案中复制/粘贴代码的人:请注意,在构建命令之前应该有一个制表符,而不是四个空格 (reference)。
猜你喜欢
  • 2018-08-31
  • 2015-03-26
  • 2011-09-29
  • 2019-05-02
  • 2019-06-01
  • 1970-01-01
  • 2014-03-22
  • 2021-11-18
  • 1970-01-01
相关资源
最近更新 更多