gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:30:35 25 4
gpt4 key购买 nike

我正在使用GCC for Renesas使用瑞萨电子的 E2 Studio IDE (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 项目中

  • 右键单击 E2 的“Project Explorer” Pane 中的项目名称
  • 点击导入并选择文件系统
  • 浏览到 get-repo-dir 并选择(单击)lib 文件夹
  • 选中左侧 Pane 中的复选框以包含 lib 中的所有文件
  • 确保选择“创建顶级文件夹”
  • 点击“高级”
  • 选中“在工作区中创建链接”和“创建虚拟文件夹”复选框,并且“创建相对于以下位置的链接位置”是 PROJECT_LOC
  • 完成

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

  • 右键单击 E2 的“Project Explorer” Pane 中的项目名称
  • 选择“属性”
  • 选择C/C++ 常规 > 路径和符号
  • 确保配置是当前/事件的配置
  • 选择“GNU C”语言
  • 点击“添加”添加以下内容
    • “${ProjDirPath}/../../lib/my_lib_a”
    • “${ProjDirPath}/../../lib/my_lib_b”
  • 申请
  • 验证这些路径在 C/C++ Build > Settings > Compiler > Includes 中可见

因此,在 E2 Studio 中,项目资源管理器显示..

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 的 Project Explorer Pane 中,我将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com