Ошибка компоновщика Renesas GCC с общим кодом

Я использую GCC для Renesas с IDE Renesas E2 Studio (v.6.2.0). Не то чтобы это имело значение, но я также использовал Applilet3 (v.3.08.01.05) для генерации файлов поддержки платы и драйверов периферийных устройств.

Когда я пытаюсь собрать, я получаю следующие ошибки...

'Invoking Linker'
rl78-elf-gcc (......object files and flags.......)
./src/r_main.o: In function `main':

<path_to_git_repo_dir>\src\<project_name>\HardwareDebug/../src/r_main.c:86: undefined reference to `_common_lib_a_init'
<path_to_git_repo_dir>\src\<project_name>\HardwareDebug/../src/r_main.c:89: undefined reference to `_common_lib_b_init'

collect2.exe: error: ld returned 1 exit status
makefile:67: recipe for target 'my_project.elf' failed
make: *** [my_project.elf] Error 1

Настройка проекта

У меня есть некоторый исходный код, разделяемый между проектами в папке "lib". В main() Я вызываю некоторые функции инициализации для этих "библиотек", как вы можете видеть из ошибок. Я не понимаю, почему процесс компиляции работает, и все же это не удается.

Мой исходный текст дерева выглядит так...

git-repo-dir/
    .git/
    doc/
    lib/
        my_lib_a/
            common_lib_a.h
            common_lib_a.c
        my_lib_b/
            common_lib_b.h
            common_lib_b.c
    src/
        my_project/
            .cproj
            .project
            applilet3_config.cgp
            src/
            generate/

Я добавил исходный код библиотеки в свой проект E2 Studio с помощью...

  • Щелкните правой кнопкой мыши имя проекта на панели "Project Explorer" в E2.
  • Нажатие кнопки Import и выберите File System
  • Перейти к get-repo-dir и выберите (в один клик) lib папка
  • Установите флажок на левой панели, чтобы включить все файлы в lib
  • Убедитесь, что выбран "Создать папку верхнего уровня"
  • Нажмите "Дополнительно"
  • Установите флажки "Создать ссылки в рабочей области" и "Создать виртуальные папки" и "Создать расположения ссылок относительно:". PROJECT_LOC
  • Конец

Затем я добавляю пути включения для библиотек в настройки сборки...

  • Щелкните правой кнопкой мыши имя проекта на панели "Project Explorer" в E2.
  • Выберите "Свойства"
  • Выбрать C/C++ General > Paths and Symbols
  • Убедитесь, что конфигурация является текущей / активной
  • Выберите язык "GNU C"
  • Нажмите "Добавить", чтобы добавить следующее
    • "${ProjDirPath}/../../lib/my_lib_a"
    • "${ProjDirPath}/../../lib/my_lib_b"
  • Применять
  • Убедитесь, что эти пути видны в C/C++ Build > Settings > Compiler > Includes

Так в E2 Studio, Project Explorer показывает..

Archives/           (a virtual folder)
Includes/           (a virtual folder/list)
src/
generate/
lib/                (the virtual lib folder I added)
    my_lib_a/
    my_lib_b/

Есть идеи, почему я получаю ошибку компоновщика?

1 ответ

Решение

В конце концов я заметил, что журнал сборки не содержит никаких файлов C из lib/ папка.

Решение было простым. В E2 Studio на панели Project Explorer я перетащил lib/ папка в (сверху) src/ папка.

Теперь структура в Project Explorer выглядит следующим образом:

Archives/           (a virtual folder)
Includes/           (a virtual folder/list)
src/
    lib/            (the virtual lib folder I added)
        my_lib_a/
        my_lib_b/
generate/

Очевидно, E2 Studio не помещает исходный код, который находится за пределами src/ каталог в автоматически сгенерированном файле make. Или, может быть, есть некоторые настройки, которые я пропустил. Тем не менее, так как код C не был скомпилирован, не было объектного файла для ссылки, следовательно, ошибка компоновщика.

Другие вопросы по тегам