[英]Renesas GCC linker error with shared code
我正在瑞薩電子的E2 Studio IDE(v.6.2.0)中使用瑞薩電子的GCC 。 沒關系,但是我還使用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/
我最終注意到構建日志中沒有包含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代碼,因此沒有要鏈接的目標文件,因此出現鏈接器錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.