0

我在Renesas 的 E2 Studio IDE (v.6.2.0) 中使用GCC for Renesas 。没关系,但我也使用了 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 项目中

  • 在 E2 的“项目资源管理器”窗格中右键单击项目名称
  • 单击Import并选择File System
  • 浏览get-repo-dir并选择(单击)lib文件夹
  • 选中左侧窗格中的框以包含所有文件lib
  • 确保选中“创建顶级文件夹”
  • 点击“高级”
  • 选中“在工作区中创建链接”和“创建虚拟文件夹”和“创建相对于:的链接位置”框是PROJECT_LOC
  • 结束

然后我将库的包含路径添加到构建设置中......

  • 在 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/

任何想法为什么我会收到链接器错误?

4

1 回答 1

0

我最终注意到构建日志不包含文件lib/夹中的任何 C 文件。

解决方案很简单。在 E2 Studio 的“项目资源管理器”窗格中,我将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 代码,因此没有要链接的目标文件,因此出现链接器错误。

于 2018-06-26T20:36:32.937 回答