我想在开发的PINtool中使用DRAMSim2作为库接口。
我尝试熟悉包含dramsim_test.h的dramsim_test.cpp,其中包括DRAMSim.h(在特定目录中)。
如果我将这些文件放在我的PINtool的目录中并包含它们(除了.cpp。我使用PINtool中的代码)我得到一个链接器(我猜)错误:
undefined symbol: _ZN7DRAMSim23getMemorySystemInstanceERKSsS1_S1_S1_jPSs
PINtool有一个配置文件,可以写下这些:
## Libraries to link
ifeq ($(TARGET_OS),mac)
APP_LIBS := -lm
else
APP_LIBS := -Wl,--as-needed -lm
endif
DL_LIB :=
APP_LIB_ATOMIC := -latomic
APP_LIB_XED := -lxed
TOOL_LIBS := -lpin -lxed
SATOOL_LIBS := -lsapin -lxed
CXX_LIBS :=
dramsim示例的makefile有:
$(CXX) -g -o dramsim_test dramsim_test.cpp -I../ -L../ -ldramsim -Wl,-rpath=../
我想我必须在pintool配置文件中添加-ldramism选项,但我不知道如何。
我不熟悉链接器选项,配置文件等。如何链接它们?
更新:问题解决了。通过添加-ldramsim更改conf文件并且没有工作,我试图将libdramsim.so移动到allcache_v7.cpp的文件夹中并且没问题......
答案 0 :(得分:1)
只需将ecmaVersion
添加到-ldramsim
变量即可。您还需要添加其路径。所以改变这一行:
TOOL_LIBS
到
TOOL_LIBS := -lpin -lxed
更新现在您已经成功构建了库,您几乎就在那里。您只需要确保动态链接器在加载时找到它。从理论上讲,这是从shell提示符中完成的:
TOOL_LIBS := -lpin -lxed -L/path/to/dramsim/ -ldramsim
如果仍然存在问题,请检查链接器是否可以解决它:
> export LD_LIBRARY_PATH=/path/to/dramsim:${LD_LIBRARY_PATH}
> #command to invoke binary that uses your library allcache_v7.so
这应该告诉您链接器是否可以解析libdramsin.so。在> ldd allcache_v7.so | grep dramsim
命令之前和之后尝试它 - 看看输出是否从“未找到”变为库的真实路径。