1.2K Star 6.3K Fork 5.3K

OpenHarmony / docs

 / 详情

[问题咨询]: C、C++混合编译错误

待办的
创建于  
2024-04-18 11:01

问题描述

我尝试将GPIO的相关操作封装成GPIO类,之后使一个LED类继承该GPIO类,具体代码如下:

class io{
  public:
   io() {}; 
   virtual void io_init();
   virtual void io_set_val(IotGpioValue val);
};

class led : public io
{
  public:
    led() {};
    void io_init(){
      IoTGpioInit(LED_TEST_GPIO);
      hi_io_set_func(HI_IO_NAME_GPIO_9, HI_IO_FUNC_GPIO_9_GPIO);
      IoTGpioSetDir(LED_TEST_GPIO, IOT_GPIO_DIR_OUT);
    }

    void io_set_val(IotGpioValue val){
      IoTGpioSetOutputVal(LED_TEST_GPIO, val);
    }
    
};

业务代码为控制LED灯闪烁,如下:

static void *LedTask(const char *arg)
{
    (void)arg;
    led a;
    a.io_init();
    int flag = 0;
    IotGpioValue val = IOT_GPIO_VALUE0;
    while (1) {
        if(flag == 0){
          val = IOT_GPIO_VALUE0;
          flag = 1;
        }
        else{
          val = IOT_GPIO_VALUE1;
          flag = 0;
        }
        a.io_set_val(val);
        osDelay(500);
    }

    return NULL;
}

我已经将引用的头文件如"iot_gpio.h"使用extern "C"声明,但我进行编译时出现了如下报错:

[OHOS ERROR] riscv32-unknown-elf-ld -nostartfiles -nostdlib -static --gc-sections -L/home/ws/Desktop/OpenHarmony_v3.0_LTS/device/hisilicon/hispark_pegasus/sdk_liteos/build/scripts/../../../../../huawei/hms/hilink/ohos/l0/hi3861/lib/wifi -L/home/ws/Downloads/gcc_riscv32/bin/../lib/gcc/riscv32-unknown-elf/7.3.0 -Lbuild/build_tmp/libs/app/wifiiot_app -Lbuild/build_tmp/libs/components/at -Lbuild/build_tmp/libs/platform/drivers -Lbuild/build_tmp/libs/platform/system -Lbuild/build_tmp/scripts -Lbuild/libs -Lbuild/libs/hi3861/release/no_mesh -Lbuild/scripts -Lohos/libs -Tbuild/build_tmp/scripts/link.lds -Map=output/bin/Hi3861_wifiiot_app.map -o output/bin/Hi3861_wifiiot_app.out --start-group --no-whole-archive --whole-archive -ladc -lat -lauthmanager -lblackbox -lbootstrap -lbroadcast -lc_flash -lcfg -lcjson_static -lcmsis -lcpup -ldeviceauth -ldeviceauth_hal_liteos -ldiag -ldiscovery -ldrv -ldump_static -lflash -lgcc -lgpio -lhal_file_static -lhal_iothardware -lhal_sysparam -lhal_token_static -lhal_update_static -lhal_wifiaware -lhichainsdk -lhidumper_mini -lhievent_lite -lhilog_lite -lhiview_lite -lhota -lhuks_3.0_sdk -li2c -lio -liperf -llitekernel_flash -lltoswpa -llwip -lm_flash -lmbedtls -lmyapp -lnative_file -lparttab -lposix -lpwm -lres_cfg -lsamgr -lsamgr_adapter -lsamgr_source -lsdio -lsec_flash -lspiffs -lsysparam -lsystem -ltoken_static -ltrans_service -ltsensor -luart -lupg -lutils_kv_store -lwifi -lwifi_flash -lwifiaware -lwifiiot_app -lwifiservice -lwpa --end-group
[OHOS ERROR] riscv32-unknown-elf-ld: ohos/libs/libmyapp.a(libmyapp.hello_world.o):(.rodata._ZTI3led[_ZTI3led]+0x0): undefined reference to `vtable for __cxxabiv1::__si_class_type_info'
[OHOS ERROR] riscv32-unknown-elf-ld: ohos/libs/libmyapp.a(libmyapp.hello_world.o):(.rodata._ZTI3led[_ZTI3led]+0x8): undefined reference to `typeinfo for io'

请问该错误是否是因为链接命令中"-nostdlib"选项导致没有链接c++标准库而造成的,如果是,我该如何取消该选项?如果不是,请问该如何修复这个报错。

评论 (1)

Wu Sen 创建了任务
Wu Sen 添加了
 
question
标签
展开全部操作日志

感谢提交Issue!关于Issue的交互操作,请访问OpenHarmony社区支持命令清单。如果有问题,请联系 @NEEN @zengyawen @时睿 @Peter_1988 。如果需要调整订阅PR、Issue的变更状态,请访问链接

Thanks for submitting the issue. For more commands, please visit OpenHarmony Command List. If you have any questions, please refer to committer @NEEN @zengyawen @时睿 @Peter_1988 for help. If you need to change the subscription of a Pull Request or Issue, please visit the link.

openharmony_ci 添加了
 
waiting_for_assign
标签

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(2)
7387629 openharmony ci 1656582662
其他
1
https://gitee.com/openharmony/docs.git
git@gitee.com:openharmony/docs.git
openharmony
docs
docs

搜索帮助

344bd9b3 5694891 D2dac590 5694891