2016-06-08 3 views
1

Ich möchte DRAMSim2 als Bibliotheksschnittstelle in einem entwickelnden PINtool verwenden.wie dramsim2 library interface mit einem PINtool verknüpft werden

Ich versuche mit dramsim_test.cpp vertraut zu sein, das dramsim_test.h enthält, das DRAMSim.h (in einem bestimmten Verzeichnis) enthält.

Wenn ich diese Dateien im Verzeichnis meiner Stiftvorrichtung ein gesetzt sind sie (mit Ausnahme von CPP dafür verwende ich den Code in der Stiftvorrichtung.) Ich bekomme einen Linker (nehme ich an) Fehler:

undefined symbol: _ZN7DRAMSim23getMemorySystemInstanceERKSsS1_S1_S1_jPSs 

die Stiftvorrichtung hat eine Konfigurationsdatei, die diese schreibt:

## 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 := 

die Make-Datei von dramsim Beispiel hat dies:

$(CXX) -g -o dramsim_test dramsim_test.cpp -I../ -L../ -ldramsim -Wl,-rpath=../ 

Ich nehme an, dass ich irgendwo in der Pintool-Konfigurationsdatei die Option -dramism hinzufügen muss, aber ich weiß nicht wie.

Ich bin nicht vertraut auch mit Linker Optionen, Konfigurationsdateien usw. Wie kann ich sie verknüpfen?

UPDATE: Das Problem gelöst. die conf-Datei durch Hinzufügen -ldramsim und hat nicht funktioniert Nach dem Wechsel habe ich versucht, die libdramsim.so in den Ordner von allcache_v7.cpp zu bewegen und ist ok ...

Antwort

1

Gerade -ldramsim zum TOOL_LIBS Variable hinzuzufügen. Sie müssen auch seinen Pfad hinzufügen. So ändern Sie die Zeile:

TOOL_LIBS := -lpin -lxed 

zu

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

UPDATE: Jetzt, wo Sie erfolgreich Ihre Bibliothek erstellt haben, sind Sie fast da. Sie müssen nur sicherstellen, dass der dynamische Linker beim Laden gefunden wird. In der Theorie wird dies von Ihrem Shell-Prompt wie folgt durchgeführt:

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

Wenn dies immer noch Probleme gibt, überprüfen, ob der Linker sie auflösen kann:

> ldd allcache_v7.so | grep dramsim 

Dies sollte Ihnen sagen, ob der Linker auflösen libdramsin.so oder nicht. Probieren Sie es vor und nach dem export ... Befehl - sehen Sie, ob sich die Ausgabe von etwas wie "Nicht gefunden" in den wahren Pfad der Bibliothek ändert.

+0

danke für deine antwort ... aber das problem existiert immer noch. Ich habe die Zeile geändert, die Sie gesagt haben und nicht funktioniert. Ich habe auch versucht, dies zu ändern: CXX_LPATHS: = -I ../../../DRAMSim2/ -L ../../../DRAMSim2/ (die Pfade sind korrekt, aber ich weiß nicht, wie ich -I benutze und -L) – user1969182

+0

Kannst du dein PINTool-Build so ausführlich schreiben, dass es die Compiler-Befehlszeile (n), die es verwendet, ausgibt und diese teilt? – Smeeheey

+0

'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/komponenten/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' – user1969182

Verwandte Themen