簡體   English   中英

瑞薩電子GCC鏈接器錯誤,共享代碼

[英]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項目中。

  • 右鍵單擊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代碼,因此沒有要鏈接的目標文件,因此出現鏈接器錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM