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


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

最佳答案

最终,我发现构建日志不包含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代码,因此没有要链接的目标文件,因此出现链接器错误。

关于c - 瑞萨电子GCC链接器错误,共享代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51051027/

10-16 01:52