瑞萨电子GCC链接器错误,共享代码

时间:2018-06-26 20:36:33

标签: c gcc compilation renesas-rx

我在瑞萨电子的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/

有什么想法为什么会出现链接器错误?

1 个答案:

答案 0 :(得分: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代码,因此没有要链接的目标文件,因此出现链接器错误。