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/EK-TM4C1294XL:将仅标题库添加到Energia项目

Guru**** 2610985 points
Other Parts Discussed in Thread: ENERGIA

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/638817/ccs-ek-tm4c1294xl-adding-a-header-only-library-to-an-energia-project

部件号:EK-TM4C1294XL
主题中讨论的其他部件:Energia

工具/软件:Code Composer Studio

大家好,

我正在构建一个C++ MIDI库,该库应该适用于各种嵌入式和PC环境。 它基本上是一个仅标头的库,带有一个接口类和一个庞大的#ifed语句块,用于选择使用哪种平台特定的实现。 我还希望将类似Arduino的环境作为目标,如基于Energia的TI Launchpad。 事实上,我在启动板上使用Code Composer Studio创建的Energia草图进行了大量针对Arduino特定实施的开发和调试,因为我更喜欢Code Composer提供的更强大的选项。

到目前为止,我的方法非常成功,它已经可以与经典Arduino IDE配合使用,它可以与基于CCS的Energia草图中的MSP430目标配合使用,但现在我在使用TIVA-C Launchpad测试配置时遇到了问题:我遇到了以下链接器错误

/Users/MyUsername/Library/Energia15/packages/Energia/tools/arm-none-eabi-gcc/MIDB.4-2014.0725万/bin/./lib/gcc/arm-none-eabi/MIDI.4/./././././././././arm-none-eabi/bin/ld: 4.8 找不到-L94ek_XL_TM4Sim1294k_XL_TM4C94xL 4.8 

如果我得到了正确的信息,它会搜索CPP源文件的编译版本,以便我的库链接,但显然它不存在,因为它只是标题。

我该怎么办? 首先,我想让它对我起作用,因此,如果有提示表明这种行为来自哪里,会很有帮助。 但是,如果它开箱即用,只包含页眉的任何人都可以使用,并且应该对工作库感到满意,而不需要执行一些复杂的设置,那么它也是完美的。

有什么想法?

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

    更新:当包括标题到时  

    #include "/absolute/Path/收/ simpleMIDI.h" 

    它可以顺利构建,但只要您愿意,就能顺利构建

    #include <simpleMIDI.h> 

    simpleMIDI.h位于Energia/库中,出现上述链接器错误。 这确实是一种特定于位于Energia/库搜索路径中的文件的行为。

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

    Janos,

    我不确定我是否清楚地了解您的工作流程,但我将在这里补充一些想法,希望这些想法能引导您朝着正确的方向前进。

    我看了一些Energia示例草图在导入到CCS后。 通常,库(如SPI,WiFi等)设置为自己的项目,创建静态库,然后主项目将库项目添加为依赖关系。 静态库也包含在主项目的--library链接器选项中。 在这些示例中,静态库项目同时包含C++源文件和头文件。 我假定您的环境相似,只是MIDI库没有源文件,只有头文件。 是这样吗?

    您可以尝试创建一个仅包含simpleMIDI.h头文件的空源文件,使用该源文件构建一个库,然后将该库链接到主项目中(类似于Energia示例所做的操作)。 或者,如果您根本不打算生成库,而只是将头文件包含在主源文件中,请尝试在--library linker选项中删除对MIDI库的引用,并查看是否有帮助。

    如果我误解了问题和/或您的发展环境,请予以澄清。 或者,更好的做法是使用示例测试案例来演示问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,你说得对。 现在我还了解了实际发生的事情,我没有意识到工作空间中出现的所有其他项目都在构建静态库,然后将这些静态库链接到主项目中。

    对于所有位于用户Energia/libraries文件夹(通过Energia草图的#include<foo.h>包含)中的标头,是否可以将其假定为默认CCS行为?

    在这种情况下,只要将我的标题包含在.cpp文件中,就能解决我的问题。 但是,由于我的主要目的是提供一个仅用于标题的库,而实际上并不需要该库,因此我将把.cppp文件中的include语句包装在 #ifdef 语句中,只有当它是基于TM4C的Energia CCS项目,并且只生成一个空的源文件时,该语句才变为true。 是否建议使用一组良好的宏来检查以正确识别此设置?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Janos Buttonere 说:
    对于要检查的一组好的宏是否有任何建议,以正确识别此设置?[/QUOT]

    根据  我在Energia论坛上找到的这篇相关文章,尝试在Energia.h中定义的宏(target_is_blizzard_RB1, target_is_snowflake_RA0等)。  

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

    我知道要检查的目标特定宏,但我只是想为TIVA Launchpad确定一个基于CCS的Energia项目,这样就不会确定Energia IDE生成的项目。 是否有任何宏告诉我使用CCS?

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

    Janos Buttonere 说:
    是否有任何宏告诉我使用了CCS?[/QUOT]

    抱歉,我尚未找到您可以在此处使用的宏。 如果我找到任何信息,我将发布更新。