Можем ли мы включить исходный файл C другим способом? - PullRequest
0 голосов
/ 14 марта 2019

Я делаю голый металлический проект на Cyclone V, и сейчас я пытаюсь сделать голое металлическое приложение на C. Однако у меня есть некоторые проблемы с включением исходного файла.

Например, я использую функцию alt_fpga_state_get() из alt_fpga_manager.h, но она выдает мне сообщение об ошибке

"неопределенная ссылка на 'atl_fpga_state_get ()'

Зная, что ему нужен исходный файл, содержащий функцию, я импортирую исходный файл без проблем. Однако, здесь есть еще одна вещь, которая внутри alt_fpga_manager.c также выдает сообщение об ошибке

"неопределенная ссылка на 'alt_clock_is_enable'

Затем мне нужно импортировать исходный файл для alt_clock_manager.h, и проблема будет продолжаться до тех пор, пока я не закончу импортировать всю папку src. После этого все проблемы с «неопределенной ссылкой» были решены, но пришла другая проблема, сообщающая, что мой OCRAM переполнен (я думаю, из-за добавления большого количества исходного файла).

Я хотел бы знать, есть ли какое-то решение для этого, потому что продолжать импортировать исходный файл не очень удобно. Я посмотрел на некоторые примеры и обнаружил, что в их makefile есть эта строка

HWLIBS_SRC  := alt_reset_manager.c alt_clock_manager.c alt_spi.c alt_globaltmr.c alt_timers.c alt_watchdog.c 

Я думаю, что они включают исходный файл, но я не уверен. Надеюсь, кто-нибудь может дать мне подсказку, чтобы решить эту проблему.

Спасибо!

1 Ответ

1 голос
/ 14 марта 2019

когда вы #include файл заголовка, вы получаете функцию объявлений (и т. Д. В зависимости от содержимого файла заголовка), которая не определяет их, вы пропустили связь с нужным объектомили lib файлы

Пример:

main.c is

#include "f.h"

int main()
{
   f();
}

fh is

extern void f();

fc is

void f() {}

Если я просто рассмотрим main.c :

/tmp % gcc main.c 
/tmp/ccFs7Gyz.o: In function `main':
main.c:(.text+0xa): undefined reference to `f'
collect2: ld returned 1 exit status

Но также учитывая fc :

/tmp % gcc main.c f.c

Конечно, можно сделатьв несколько шагов

/tmp % gcc -c f.c
/tmp % gcc main.c f.o

и т. д.

PS не # включает исходный файл, поэтому #include "f.c" в mainc.c * нет1039 *

...