2016-08-14 4 views
1

У меня есть приложение C, которое использует функцию из операций Gem5, называемую «m5_dumpreset_stats()».Ссылка на m5ops.h на проект C

Итак, я сделал следующее, я включил файл заголовка этой функции:

#include "../gem5-stable/util/m5/m5op.h" 

то в моем исходном файле я назвал функцию:

void foo() 
{ 
    m5_dumpreset_stats(0,0); 
    /* For loop */ 
    m5_dumpreset_stats(0,0); 
} 

Чтобы построить свой проект I» m с помощью Makefile:

CC=arm-linux-gnueabi-gcc 
CFLAGS=-g -c -Wall -O3 -mfpu=neon 
LDFLAGS=-static 

SOURCES=$ foo.c 
OBJECTS=$(SOURCES:.c=.o) 

EXECUTABLE=foo 

all: $(TASKMAP) $(SOURCES) $(EXECUTABLE) 

$(EXECUTABLE): $(OBJECTS) 
$(CC) $(LDFLAGS) $(OBJECTS) -lm -o [email protected] 

.c.o: 
    $(CC) $(CFLAGS) $< -lm -o [email protected] 

clean: 
    rm -fr $(OBJECTS) $(EXECUTABLE) 

Прежде всего, я предполагаю, что мне нужно связать библиотеку с помощью Makefile, но честно Я не знаю, как? Может ли кто-нибудь показать мне правильный способ сделать это?

P.S: m5_dumpreset_stats (задержка, период): сохранение и сброс статистики моделирования в файл задержка наносекунд; повторяйте это каждый период в наносекундах.

+1

Для этого используется опция '-l' (нижний регистр). Чтобы сообщить компоновщику ссылку на библиотеку. –

+0

Это не работает, кажется, что еще нет. Я копаю, чтобы увидеть, что еще не хватает –

+0

Является ли «make» неудачным? Если да, то какие сообщения? Вы пробовали использовать команду, которую вы ожидаете использовать? – TonyB

ответ

1

Спасибо за ваш вклад. Это было мое решение: Смотрите, что я использую ядро ​​ARM для моделирования я использовал Makefile.arm для создания библиотеки под названием «m5», то я должен был сделать следующие изменения в моей Makefile:

$(EXECUTABLE): $(OBJECTS) 
$(CC) $(LDFLAGS) $(OBJECTS) -lm -L"/home/anoir/gem5-stable/util/m5" -lm5 -o [email protected] 

и I хранится включение в моем файле заголовка для вызова m5op.h так:

#include "/home/anoir/gem5-stable/util/m5/m5op.h" 

Наконец, я проверил его в тренажере и проверил файл статистики и отлично работает спасибо вам.

2

Поскольку ваш заголовок находится в каталоге, который обычно не выполняется, это, скорее всего, относится и к вашей библиотеке. Таким образом, вам понадобятся два флага: -l для ссылки на библиотеку и -L, чтобы добавить другой каталог библиотеки для поиска.

Если моя библиотека была libm5op.a расположен в »../gem5-stable/util/m5", я мог бы сделать:

$(CC) $(LDFLAGS) $(OBJECTS) -lm -L"../gem5-stable/util/m5" -lm5op -o [email protected] 

или некоторые такие, как подходит к вашей ситуации ,

+1

В моем файле makefile я бы использовал макрос вроде 'M5_UTIL_DIR = ../ gem5-stable/util/m5' с параметрами' -I' и '-L', чтобы их можно было перемещать с помощью одного -строчное изменение в make-файле (и его можно изменить для тестирования с помощью команды make make M5_UTIL_DIR =/some/where/else/m5' в командной строке). Если библиотека и заголовок находятся в разных каталогах, я бы либо использовал общий родительский каталог, либо две отдельные переменные, определяющие два отдельных местоположения. Конечно, источник должен быть пересмотрен: см. [Каковы преимущества относительного пути для заголовка] (http://stackoverflow.com/questions/597318). –

Смежные вопросы