【问题标题】:how to link dramsim2 library interface with a PINtool如何将 dramsim2 库接口与 PINtool 链接
【发布时间】:2016-06-08 15:53:34
【问题描述】:

我想在开发的 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 的文件夹中并且没问题...

【问题讨论】:

    标签: c++ config linker-errors


    【解决方案1】:

    只需将-ldramsim 添加到TOOL_LIBS 变量即可。您还需要添加其路径。所以换行:

    TOOL_LIBS := -lpin -lxed
    

    TOOL_LIBS := -lpin -lxed -L/path/to/dramsim/ -ldramsim
    

    更新:现在您已经成功构建了您的库,就快完成了。您只需要确保动态链接器在加载时找到它。理论上,这是在您的 shell 提示符下按如下方式完成的:

    > export LD_LIBRARY_PATH=/path/to/dramsim:${LD_LIBRARY_PATH}
    > #command to invoke binary that uses your library allcache_v7.so
    

    如果这仍然给您带来问题,请检查链接器是否可以解决它:

    > ldd allcache_v7.so | grep dramsim
    

    这应该告诉您链接器是否可以解析 libdramsin.so。在 export ... 命令之前和之后尝试一下 - 查看输出是否从“未找到”之类的内容更改为库的真实路径。

    【讨论】:

    • 感谢您的回答...但问题仍然存在。我改变了你说的那条线,但没有用。我也试图改变这个: CXX_LPATHS := -I ../../../DRAMSim2/ -L ../../../DRAMSim2/ (路径是正确的,但我不知道如何使用 -I和-L)
    • 你能否让你的 PINTool 构建变得冗长,以便输出它使用的编译器命令行,并分享这个?
    • g++ -DBIGARRAY_MULTIPLIER=1 -Wall -Werror -Wno-unknown-pragmas -fno-stack-protector -DTARGET_IA32E -DHOST_IA32E -fPIC -DTARGET_LINUX -I../../../source/include/pin -I../../../source/include/pin/gen -I../../../extras/components/include -I../../../extras/xed-intel64/include -I../../../source/tools/InstLib -O3 -fomit-frame-pointer -fno-strict-aliasing -c -o obj-intel64/allcache_v7.o allcache_v7.cpp
    • 还有:g++ -shared -Wl,--hash-style=sysv -Wl,-Bsymbolic -Wl,--version-script=../../../source/include/pin/pintool.ver -o obj-intel64/allcache_v7.so obj-intel64/allcache_v7.o -L../../../intel64/lib -L../../../intel64/lib-ext -L../../../intel64/runtime/glibc -L../../../extras/xed-intel64/lib -lpin -lxed -lpindwarf -ldl
    • 好的。我想试试这个:不要将-ldramsim 添加到CXX_LIBS,而是将其添加到TOOL_LIBS。所以相关行变成TOOL_LIBS := -lpin -lxed -ldramsim
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多