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