Jump to content
ducbueno

Problems using SystemC Verification Library

Recommended Posts

Hello,

 

I'm facing some porblems in using SystemC Verifcation Library, my codes just don't compile.

 

I'm using Ubuntu 14.04 (64 bits) and I followed the instructions on the INSTALL text file that comes with de SCV package.

 

I used: ../configure prefix=/usr/local/scv-2.0.0 with-systemc=/usr/local/systemc-2.3.1

(I've created the /usr/loca//scv-2.0.0 beforehand)

 

After the configuration: make & sudo make install

 

The installation finishes without errors.

 

The problems start when I try to use the library in codes. I add to my codes "#include<scv.h>" and add my makefiles looks like this:

CC = g++
INCDIR = -I. -I$(SYSTEMC)/include -I$(SCV)/include
LIBDIR = -L. -L$(SYSTEMC)/lib-linux64 -L$(SCV)/lib-linux64
LIBS   = -lsystemc -lscv -lm
CFLAGS = -O2 -Wall -DDEBUG_SYSTEMC

TARGET = verification.x
SRCS   = top.cpp
OBJS   = $(SRCS:.cpp=.o)

all: $(TARGET)

$(TARGET): $(OBJS)
    $(CC) -o $@ $(LIBDIR) $(LIBS) $(OBJS)

.cpp.o:
    $(CC) $(CFLAGS) $(INCDIR) -c $<

clean:
    @rm -f *.o $(TARGET)

 

Obs.: the environment variable SCV is previously set

 

Then when I run the make command I get the following (not the full output):

top.o:(.rodata._ZTV14scv_extensionsIcE[_ZTV14scv_extensionsIcE]+0x210): undefined reference to `_scv_extension_util::get_dynamic_data()'
top.o:(.rodata._ZTV14scv_extensionsIcE[_ZTV14scv_extensionsIcE]+0x218): undefined reference to `_scv_extension_rand_char::updated()'
top.o:(.rodata._ZTV14scv_extensionsIcE[_ZTV14scv_extensionsIcE]+0x220): undefined reference to `_scv_extension_rand_char::uninitialize()'
top.o:(.rodata._ZTV14scv_extensionsIcE[_ZTV14scv_extensionsIcE]+0x228): undefined reference to `_scv_extension_rand_char::initialize() const'
top.o:(.rodata._ZTV14scv_extensionsIcE[_ZTV14scv_extensionsIcE]+0x230): undefined reference to `_scv_extension_rand_char::is_initialized() const'
top.o:(.rodata._ZTV14scv_extensionsIcE[_ZTV14scv_extensionsIcE]+0x238): undefined reference to `_scv_extension_callbacks_char::remove_cb(int)'

top.o:(.rodata._ZTV14scv_extensionsIcE[_ZTV14scv_extensionsIcE]+0x260): undefined reference to `_scv_extension_rand_char::generate_value_()'
collect2: error: ld returned 1 exit status
make: *** [verification.x] Error 1

The error seems to come from a library linking problem, but to me it looks like the SCV libraries are linked correctly.

 

Does anyone knows what is going on?

 

Thanks in advance,

 

 

Eduardo.
 

Share this post


Link to post
Share on other sites

The link order is incorrect.  The dependencies are resolved from right to left.  Your Makefile should say:

# list SCV before SystemC
LIBS   = -lscv -lsystemc  -lm

# local objects first, then the required libraries
$(TARGET): $(OBJS)
    $(CC) -o $@ $(LIBDIR) $(OBJS) $(LIBS) 

As a side note: For C++ applications, you should prefer the variables CXX (for the C++ compiler) and CXXFLAGS (for the compiler flags). CC and CFLAGS are intended for C projects. Secondly, I would recommend not to define DEBUG_SYSTEMC in user code.

 

hth,
  Philipp

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×