我在瑞萨电子的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项目中。
Import
并选择File System
get-repo-dir
并选择(单击)lib
文件夹lib
中的所有文件PROJECT_LOC
然后我将库的包含路径添加到构建设置...
C/C++ General > Paths and Symbols
"${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/
答案 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代码,因此没有要链接的目标文件,因此出现链接器错误。