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.

[参考译文] MSP432P401R:我想为项目使用 C++、但我的 makefile 有问题。 (GCC)

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/672249/msp432p401r-i-want-to-use-c-for-my-project-but-am-having-troubles-with-my-makefile-gcc

器件型号:MSP432P401R

我采用了 driverlib 空 gcc 项目、并添加了一些简单的 c++代码、并在主函数中创建并销毁了一个对象。  我还说

#ifdef _cplusplus
extern "C"
{
#endif

//code

#ifdef _cplusplus
}
#endif 

启动文件和系统 c 文件。

代码会编译、但不会链接。 它向我发出此警告(重复):

警告:/usr/lib/gcc/arm-none-eabi/5.4.1/../../../arm-none-eabi/lib/armv7e-m/fpu/libstdc ++_nano。a (atexit_arm.o)使用2字节 wchar_t、但输出使用4字节 wchar_t;跨对象使用 wchar_t 值可能会失败

此错误:

/usr/lib/gcc/arm-none-eabi/5.4.1/../../../arm-none-eabi/lib/armv7e-m/fpu/libc_nano.a (lib_a-abort.o):在函数`abort'中:
/build/newlib-XAuz1P/newlib-2.4.0.20160527/build_nano/arm-none-eabi/armv7e-m/fpu/newlib/libc/stdlib/../../../../../../../newlib/libc/stdlib/abort.c:63:未`对 μ_exit'的引用
/usr/lib/gcc/arm-none-eabi/5.4.1/../../../arm-none-eabi/lib/armv7e-m/fpu/libc_nano.a (lib_a-exit.o):在函数`exit'中:
/build/newlib-XAuz1P/newlib-2.4.0.20160527/build_nano/arm-none-eabi/armv7e-m/fpu/newlib/libc/stdlib/../../../../../../../newlib/libc/stdlib/exit.c:70:未定义对`_exit'的引用
/usr/lib/gcc/arm-none-eabi/5.4.1/../../../arm-none-eabi/lib/armv7e-m/fpu/libc_nano.a (lib_a-openr.o):在函数`_open_r'中:
/build/newlib-XAuz1P/newlib-2.4.0.20160527/build_nano/arm-none-eabi/armv7e-m/fpu/newlib/libc/reent/../../../../../../../newlib/libc/reent/openr.c:59:未定义对`_open'的引用
/usr/lib/gcc/arm-none-eabi/5.4.1/../../../arm-none-eabi/lib/armv7e-m/fpu/libc_nano.a (lib_a-sbrkr.o):在函数` sbrk_r'中:
/build/newlib-XAuz1P/newlib-2.4.0.20160527/build_nano/arm-none-eabi/armv7e-m/fpu/newlib/libc/reent/../../../../../../../newlib/libc/reent/sbrkr.c:58:对` sbrk'的引用未定义
/usr/lib/gcc/arm-none-eabi/5.4.1/../../../arm-none-eabi/lib/armv7e-m/fpu/libc_nano.a (lib_a-signalr.o):在函数` kill_r'中:
/build/newlib-XAuz1P/newlib-2.4.0.20160527/build_nano/arm-none-eabi/armv7e-m/fpu/newlib/libc/reent/../../../../../../../newlib/libc/reent/signalr.c:61:未定义对` kill'的引用
/usr/lib/gcc/arm-none-eabi/5.4.1/../../../arm-none-eabi/lib/armv7e-m/fpu/libc_nano.a (lib_a-signalr.o):在函数` getpid_r'中:
/build/newlib-XAuz1P/newlib-2.4.0.20160527/build_nano/arm-none-eabi/armv7e-m/fpu/newlib/libc/reent/../../../../../../../newlib/libc/reent/signalr.c:97:对`_getpid'的引用未定义
/usr/lib/gcc/arm-none-eabi/5.4.1/../../../arm-none-eabi/lib/armv7e-m/fpu/libc_nano.a (lib_a-writer.o):在函数`写入_r'中:
/build/newlib-XAuz1P/newlib-2.4.0.20160527/build_nano/arm-none-eabi/armv7e-m/fpu/newlib/libc/reent/../../../../../../../newlib/libc/reent/writer.c:58:未定义对`写入'的引用
/usr/lib/gcc/arm-none-eabi/5.4.1/../../../arm-none-eabi/lib/armv7e-m/fpu/libc_nano.a (lib_a-close.o):在函数`_close_r'中:
/build/newlib-XAuz1P/newlib-2.4.0.20160527/build_nano/arm-none-eabi/armv7e-m/fpu/newlib/libc/reent/../../../../../../../newlib/libc/reent/closer.c:53:未定义对`_close'的引用
/usr/lib/gcc/arm-none-eabi/5.4.1/../../../arm-none-eabi/lib/armv7e-m/fpu/libc_nano.a (lib_a-fstatr.o):在函数` fstat_r'中:
/build/newlib-XAuz1P/newlib-2.4.0.20160527/build_nano/arm-none-eabi/armv7e-m/fpu/newlib/libc/reent/../../../../../../../newlib/libc/reent/fstatr.c:62:对` fstat'的引用未定义
/usr/lib/gcc/arm-none-eabi/5.4.1/../../../arm-none-eabi/lib/armv7e-m/fpu/libc_nano.a (lib_a-isattyr.o):在函数` isatty_r'中:
/build/newlib-XAuz1P/newlib-2.4.0.20160527/build_nano/arm-none-eabi/armv7e-m/fpu/newlib/libc/reent/../../../../../../../newlib/libc/reent/isattyr.c:`:对"_isatty"的引用未定义
/usr/lib/gcc/arm-none-eabi/5.4.1/../../../arm-none-eabi/lib/armv7e-m/fpu/libc_nano.a (lib_a-lseekkr.o):在函数` lseek_r'中:
/build/newlib-XAuz1P/newlib-2.4.0.20160527/build_nano/arm-none-eabi/armv7e-m/fpu/newlib/libc/reent/../../../../../../../newlib/libc/reent/lseekr.c:`:对"_lseek"的引用未定义
/usr/lib/gcc/arm-none-eabi/5.4.1/../../../arm-none-eabi/lib/armv7e-m/fpu/libc_nano.a (lib_a-readr.o):在函数`读取_r'中:
/build/newlib-XAuz1P/newlib-2.4.0.20160527/build_nano/arm-none-eabi/armv7e-m/fpu/newlib/libc/reent/../../../../../../../newlib/libc/reent/readr.c:58:未定义对`读取'的引用
collect2:错误:LD 返回1退出状态
Makefile:45:目标'cpTest.out'的配方失败
make:***[cppTest.out]错误1

这是我当前的 makefile 文件:

SIMPLELINK_MSP432_SDK_INSTALL_DIR?=/opt/ti/simplelink_msp432p4_sdk_1_60_00_12

XDC_INSTALL_DIR ?=/home/username/ti/xdctools_3_50_04_43_core

FreeRTOS_INSTALL_DIR ?=/home/username/FreeRTOSv9.0.0

GCC_ARMCOMPILER ?=/usr/bin/arm-none-eabi-g
GXX_ARMCOMPILER ?=/usr/bin/arm-none-eabi-g
GCC_ARMCOMPILER_libs ?=/usr/lib/gcc/arm-none-eabi/5.4.1

rm = rm -f
rmdir = rm -rf
DEVNULL =/dev/null

CC ="$(GCC_ARMCOMPILER)"
Lnk ="$(GCC_ARMCOMPILER)"

OBJECTSNAMES = system_msp432p401r.obj startup_msp432p401r_gcc.obj main.obj
对象=$(addprefix $(outputdir)、$(OBJECTSNAMES))
name = cppTest
outputdir ?=./debug/

CFLAGS ="-i$(SIMPLELINK_MSP432_SDK_INSTALL_DIR)/SOURCE"-i$(SIMPLELINK_MSP432_SDK_INSTALL_DIR)/source/third_party/CMSIS/Include -D_MSP432P401R_-DDeviceFamily_MSP432P401x -MCU=mcartic-m=-mv4_mcarts=-m-m=-m-mcarts=-m-m-m-m-m-m-mcarts=-m=-m-m-m-m-mcarts=-m-m-m-m-m-m-m-m-mcarts=-m-m-m-m-m-m-m-m-m-mcarts=-m-m-m-m-m-m-m-m-mcartm-m-m-m-/include/newlib-nano

lfLAGS =-WL、-T、./msp432p401r.lds "-WL、-Map、$(outputdir)/$(name).map"-l$(SIMPLELINK_MSP432_SDK_INSTALL_DIR)/source/ti/display/lib /source/third_party/fatfs/lib /source/ti/devices/msp432p4xx/driverlib/gcc -l:display.am4fg_lfg_msp4rs -lfg_msp4r_mfgsps -l_msp4r_mfgsps -mfgv_msps -r_msp4r_mfgv_msps -msp4r_msps -mfgpf-ngv_mfgv_msps -msps -r_msp4pf-ngpf-ngv_mfgv_msps (/source/ti/drivers/lib /lib/thumb/v7e-m/fpv4-sp/hard)-msp4r_msp4pf-msps -msps -mfgfgfgpv_msps -msps -r_msps -msp4pv_msp4r_msps -msp4pf-msp

所有:outdir $(name).out

输出目录:
@ mkdir -p $(outputdir)

system_msp432p401r.obj:./system_msp432p401r.c
@回声建筑$@
@$(CC)$(CFLAGS)$<-c -o $(outputdir)/$@

startup_msp432p401r_gcc.obj:./startup_msp432p401r_gcc.c
@回声建筑$@
@$(CC)$(CFLAGS)$<-c -o $(outputdir)/$@

main.obj:./main.cc
@回声建筑$@
@$(GXX_ARMCOMPILER)-std=GNU+++14 $(CFLAGS)$<-c -o $(outputdir)/$@

$(name).out:$(OBJECTSNAMES)
@回波链接...
@$(LNK)$(objects)$(LFLAGS)-o $(outputdir)/$(name).out

清理:
@回波清洁...
@$(RM)$(objects)>$(DEVNULL) 2>&1
@$(RM)$(outputdir)/$(name).out >$(DEVNULL) 2>&1
@$(rm)$(outputdir)/$(name).map >$(DEVNULL) 2>&1
@ rm -rf $(outputdir)

我认为这只是一个错误的标志、但我不确定。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    约旦
    我希望确认驱动程序将与 C++一起工作。 我将尝试在3月20日星期二之前作出答复。

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

    我已升级到 CCSv8。  (感觉比7大改进。)  不管怎样、我尝试了一个类似的项目、但对其进行了不同的攻击。  我采用了 driverlib gcc 空项目示例、并删除了 main.c  然后、我创建了一个新的源文件 main.cp。  在这里、我有暂停看门狗计时器、然后永远循环的主函数。  该项目会编译并运行。 它确实抱怨 C99不是一个有效的标准。  (我想将其更改为 g++98。)  但我在 Project Settings 中找不到正确的选项。

    不管怎样,我都创建了一个名为 Pin 的类。  它具有专用变量 short 引脚和 short 端口。  其构造函数从构造函数参数设置这些变量。 在 main.cpp 中、我包含 Pin.h 文件、该工程仍会编译。

    在主函数中、在停止看门狗计时器之后、但在无限循环之前、我创建一个引脚、然后销毁该引脚。

    pin *p =新的 pin (1,1);
    删除 p; 

    此代码无法编译。

    当我返回到计算机时、我将发布错误和项目。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    约旦
    感谢您的跟进工作、对于未能履行承诺、我深表歉意。 我无法找到任何有关将 driverLib 库链接到 C++的文档、因此我认为这些库不能与 C++一起使用、但迄今为止无法确认。

    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否还更新了编译器? arm gcc-arm-none-eabi-7-2017-Q4-major

    依赖关系
    此版本已通过以下组件验证:

    Code Composer Studio 8.0.0
    ARM 18.1.0.LTS
    XDCTools 3.50.05.12
    GNU 代码生成工具
    arm gcc-arm-none-eabi-7-2017-Q4-major
    IAR 代码生成工具
    ARM 8.20.2.
    Keil uVision (SDK 组件的子集支持 Keil IDE)
    5.23.
    TexasInstruments.MSP432E4_DFP.3.2.3.pack
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我更新了所有内容、现在它正在工作!