代码之家  ›  专栏  ›  技术社区  ›  ahogen

Renesas GCC链接器错误,共享代码

  •  0
  • ahogen  · 技术社区  · 8 年前

    我在用 GCC for Renesas 与Renesas的E2工作室IDE(V.6.2.0)合作。不是那个 这应该很重要,但我也使用了appliet3(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工作室项目中…

    • 右键单击e2的“Project Explorer”窗格中的项目名称
    • 点击 Import 然后选择 File System
    • 浏览到 get-repo-dir 然后选择(单击) lib 文件夹
    • 选中左窗格上的复选框以包含
    • 确保选中“创建顶级文件夹”
    • 单击“高级”
    • 选中“在工作区中创建链接”和“创建虚拟文件夹”以及“创建链接位置相对于:”的框。 PROJECT_LOC
    • 完成

    然后我将库的包含路径添加到生成设置…

    • 右键单击e2的“Project Explorer”窗格中的项目名称
    • 选择“属性”
    • 选择 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工作室中,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 回复  |  直到 8 年前
        1
  •  0
  •   ahogen    8 年前

    我最终注意到构建日志不包含来自 lib/ 文件夹。

    解决方案很简单。在e2 studio的ProjectExplorer窗格中,我拖动了 库/ 文件夹位于 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代码,因此没有可链接的对象文件,因此出现了链接器错误。