This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TM4C1294NCPDT:如何链接 GNU 编译器中的库

Guru**** 2589265 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/607963/ccs-tm4c1294ncpdt-how-to-link-a-lib-in-the-gnu-compiler

器件型号:TM4C1294NCPDT

工具/软件:Code Composer Studio

简单...  主题行。

我正在使用 CCS 6.2、设置为 GNU c4.9.3 Linaro。  (我已经在 TI 编译器上烧毁了自己,我想我会尝试这个...)

我正在尝试链接库、但链接器显示无法定位...

在项目设置的 GNU 连接器|库下 、我添加了搜索路径  

"C:\ti_tirtos_tivac_2_16_01_14\products\NDK_2_25_00_09\packages/ti\NDK\netctrl\lib" 

和库  

"netctrl_min_ipv1.am4fg" 

 但链接器报告"找不到-lnetctrl_min_ipv1.am4fg"

在世界其他地方、GCC/GGNU 构建工具忽略前导"lib"和后缀".a"。  但在 TI 世界中、这些库没有前缀或后缀。

我可以在 linker.cmd 脚本中看到库列表,但这些库在"input(...) "块。  因此、有些东西在某个地方创建此列表、因为它是自动生成的、而另一些地方则将库名称修改为链接器理解的内容。

让 GNU 连接器正确链接这些库的秘诀是什么?

谢谢。

-CSW

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    [引用 user="Christopher Weber"]在世界其他地区,GCC/GNU 构建工具忽略前导"lib"和后缀".a"。  但在 TI 世界中、这些库没有前缀或后缀。[/quot]

    Christopher Weber 说:
    让 GNU 链接器正确链接这些库的秘密是什么?

    使用冒号(":netctrl_min_ipv4.am4fg")预挂起库名称

    这将导致链接器将名称视为文字、而不需要前导"lib"和尾随".a"

    -l:netctrl_min_ipv1.am4fg

    谢谢

    Ki

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    太棒了! 谢谢!

    顺便说一下、这实际上是否记录在任何地方?

    -CSW
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    它应该记录在 GCC 链接器文档中(尽管看起来并不是所有文档都记录了行为)。

    www.eecs.umich.edu/.../Linker.pdf (PDF 的第14页或文档的第8页)

    -l namespec
    --library=namespec
    将 namespec 指定的归档文件或目标文件添加到要链接的文件列表中。
    此选项可以任意次数使用。 如果 namespec 为表单
    ‘:filename’,ld 将在库路径中搜索名为 filename 的文件,否则
    它将在库路径中搜索‘libnamespec’的文件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗯、这解释了我从未见过它的一些原因。 我在 Linux 中使用 DSO 进行共享、而只对静态库使用常规存档文件。 存档只是在命令行上链接、就像常规目标代码一样。

    谢谢。 拆除了一个路障!

    -CSW
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ki-Soo

    这不能正常工作。

    我正在尝试链接一些被告知要使用的库。  我可以在文件系统*上看到该文件。  我看到它在路径中。  这是 make 文件命令、我从控制台剪切过来。

    '调用:ARM 链接器'
    "C:/ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.3.LTS/bin/armcl -mv7A8 --code_state=32 -me --define=am3359 -g --diag_warning=225 --diag_wrap=off 
    --display_error_number -z -m"BBBB_Sample.map"--heap_size=0x800 --stack_size=0x800
    -i"C:/ti/pdk_am335x_1_0_7/packages/ti/transport/ndk/nimu/lib/am335x/a8/release
    -i"C:/ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.3.LTS/lib
    -i"C:/ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.3.LTS/include
    --reread_libs --define=A8_core=1 --diag_wrap=off
    --display_error_number --warn_sections --xml_link_info="BBB_Sample_linkInfo.xml"
    --rom_model -o "BB_Sample.out""./main.obj "-l"configPkg/linker.cmd"-l:ti.translation_ndk.Nimu.aa8fg -llibc.a 错误#10008-D:找不到文件":ti.translation.ndk.Nimu.aa8fg"

    路径为 C:/ti/pdk_am335x_1_0_7/packages/ti/transport/ndk/nimu/lib/am335x/a8/release 、文件为-l:ti.transport。ndk.Nimu.aa8fg

    但链接器说它找不到它。

    我现在使用的是 TI 编译 器16.9.3 LTS 的 CCS 7.2版。  这是 BBB 的项目。

    还有其他建议吗?

    -CSW

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    ti.transation.ndk.Nimu.aa8fg 库在哪里? 我没有看到正在设置任何库搜索路径。 它是否与活动编译配置子文件夹位于同一位置?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ki-Soo、

    在该长"代码"查找区域中、是我使用项目属性设置的路径。 您可以在"-l"设置中看到路径的"-i"设置以及库文件的名称。

    但是、现在当我重新测试时、我不再收到错误" cannot find file ":ti.transport.ndk.nimu.aa8fg"

    我无法解释为什么今天它在工作、只是我关闭了 CCS 并在第二天重新启动了它。

    现在这不是问题。  谢谢。
    -CSW
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    哦、等一下、我看到问题:

    [引用 user="Christopher Weber"]调用:ARM 链接器的"C:/ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.3.LTS/bin/armcl "

    这是 TI ARM 连接器、而不是 GCC。 您正在使用 TI 编译工具进行编译。 库名称的冒号前缀是一个 GCC 函数