Forums - Linking C++ with Snapdragon LLVM ARM Compiler 4.0.3

2 posts / 0 new
Last post
Linking C++ with Snapdragon LLVM ARM Compiler 4.0.3
jonathan.fisher
Join Date: 11 Oct 21
Posts: 2
Posted: Thu, 2023-07-20 01:24

Hello,

I am working with a Quectel BG77, based on the Qualcomm MDM9205, and am trying to link against a partner's C++ library.

However, we see the following error during linking (apologies for this wall of text, I wanted to include the whole context):

: && /opt/quectel/bin/clang++ --target=armv7m-none-musleabi --sysroot=/opt/quectel/armv7m-none-eabi -DQAPI_TXM_MODULE -DTXM_MODULE -DTX_DAM_QC_CUSTOMIZATIONS -DTX_ENABLE_PROFILING -DTX_ENABLE_EVENT_TRACE -DTX_DISABLE_NOTIFY_CALLBACKS  -DFX_FILEX_PRESENT -DTX_ENABLE_IRQ_NESTING  -DTX3_CHANGES -I/opt/quectel/armv7m-none-eabi/include/c++/v1 -I/opt/quectel/armv7m-none-eabi/libc/include -g -d -v -target armv7m-none-musleabi -fuse-ld=qcld -lc++ -Wl,-mno-unaligned-access -fuse-baremetal-sysroot -fno-use-baremetal-crt -Wl,-T/tmp/firmware/cmake-build-debug/app/quectel_dam_demo.ld -Wl,-Map=/tmp/firmware/cmake-build-debug/Map.map,-gc-sections -Wl,-gc-sections     -Wl,-entry=0x40000000 app/CMakeFiles/startup.dir/txm_module_preamble_llvm.o app/CMakeFiles/rheo_app.elf.dir/main.o app/CMakeFiles/rheo_app.elf.dir/src/connection.o app/CMakeFiles/rheo_app.elf.dir/src/processing.o app/CMakeFiles/rheo_app.elf.dir/src/vitals_generator.o -o app/rheo_app.elf  drivers/accelerometer/libaccelerometer-LSM6DSO32.a  lib/libaws_iot_jobs.a  lib/libaws_iot_json.a  lib/libaws_iot_shadow.a  utils/json/libjson.a  lib/libmbedtls.a  platform/quectel/ota_pal/libplatform_quectel_ota_pal.a  platform/quectel/ssl/libplatform_quectel_ssl.a  lib/quectel-sdk/quectel/utils/libquectel_utils.a  drivers/adc/librheo-adc.a  drivers/afe/librheo-afe-driver.a  app/at_cmd/librheo-at-commands.a  app/attributes/librheo-attributes.a  app/cryptography/librheo-certificate.a  cmdline/librheo-command-line.a  app/librheo-connectivity.a  app/device_state/librheo-device-state.a  app/early_warning_scores/librheo-early-warning-scores.a  drivers/flash/librheo-flash.a  utils/fs/librheo-fs.a  drivers/fuel_gauge/librheo-fuel-gauge.a  drivers/gpio/librheo-gpio.a  drivers/i2c/librheo-i2c.a  drivers/led/librheo-leds.a  app/lifecycle/librheo-lifecycle.a  logging/librheo-logging.a  app/memory_manager/librheo-memory-manager.a  app/mqtt/librheo-mqtt-thread.a  app/aws/ota/librheo-ota.a  app/processing/librheo-processing.a  drivers/rtc/librheo-rtc.a  app/settings/librheo-settings.a  app/shadows/librheo-shadows.a  drivers/spi/librheo-spi.a  app/storage/librheo-storage.a  app/threads/librheo-threads.a  utils/time/librheo-util-time.a  drivers/temperature/libtemperature-as6221.a  drivers/accelerometer/libaccelerometer-LSM6DSO32.a  lib/st-micro/libstm-lsm6dso32x.a  platform/quectel/ota_pal/libplatform_quectel_ota_pal.a  platform/quectel/ssl/libplatform_quectel_ssl.a  app/librheo-connectivity.a  drivers/led/librheo-leds.a  lib/libaws_iot_ota.a  app/modem/librheo-modem.a  platform/quectel/ota/libquectel_ota_abstraction.a  platform/quectel/ota_pal/libplatform_quectel_ota_pal.a  platform/quectel/ssl/libplatform_quectel_ssl.a  app/librheo-connectivity.a  drivers/led/librheo-leds.a  app/mqtt/librheo-mqtt-thread.a  app/aws/ota/librheo-ota.a  app/shadows/librheo-shadows.a  lib/libaws_iot_ota.a  app/modem/librheo-modem.a  platform/quectel/ota/libquectel_ota_abstraction.a  utils/json/libjson.a  app/cryptography/librheo-certificate.a  lib/libmbedtls.a  lib/libaws_iot_jobs.a  lib/libaws_iot_ota_mqtt.a  app/device_state/librheo-device-state.a  drivers/afe/librheo-afe-driver.a  lib/csem/libvpraw/liblibvpraw.a  /tmp/firmware/lib/csem/libvpraw/libvpraw.a  drivers/afe/librheo-afe-driver.a  lib/csem/libvpraw/liblibvpraw.a  /tmp/firmware/lib/csem/libvpraw/libvpraw.a  lib/libaws_iot_shadow.a  lib/libaws_iot_mqtt.a  _deps/cjson-build/libcjson_utils.a  lib/libaws_iot_json.a  drivers/i2c/librheo-i2c.a  app/version/librheo-version.a  drivers/greenteg/libgreenteg-driver.a  drivers/adc/librheo-adc.a  app/at_cmd/librheo-at-commands.a  utils/at_parser/librheo-at-parser.a  lib/libtinycbor.a  drivers/flash/src/macronix-lld/libmacronix-lld.a  drivers/spi/librheo-spi.a  drivers/gpio/librheo-gpio.a  app/settings/librheo-settings.a  utils/fs/librheo-fs.a  _deps/cjson-build/libcjson.a  app/threads/librheo-threads.a  app/memory_manager/librheo-memory-manager.a  utils/time/librheo-util-time.a  logging/librheo-logging.a  /tmp/firmware/lib/quectel-sdk/libs/diag_dam_lib.lib  /tmp/firmware/lib/quectel-sdk/libs/qapi_psm_lib.lib  /tmp/firmware/lib/quectel-sdk/libs/timer_dam_lib.lib  /tmp/firmware/lib/quectel-sdk/libs/txm_lib.lib  lib/quectel-sdk/quectel/utils/libquectel_utils.a  -lm  /tmp/firmware/lib/csem/libspo2/libspo2_wemed_1.0.0/lib_arm/libspo2.a  /tmp/firmware/lib/csem/libobp/lib_arm/libobp.a  /tmp/firmware/lib/csem/libbr/libbr_wemed_1.0.0/lib_arm/libbr.a && :
Target: armv7m-none--musleabi
Thread model: posix
Repository: (ssh://review-hexagon.quicinc.com:29418/llvm/clang-mainline 0d355f9234b0a44bd142f15655d20b06759c0965) (ssh://review-hexagon.quicinc.com:29418/llvm/llvm-mainline c956069add38e7cefbd266d7723df12179753aae)
Snapdragon LLVM ARM Compiler 4.0.3 (based on llvm.org 4.0+)
clang version 4.0.3
InstalledDir: /opt/quectel/bin
 
Options for link job construction: --driver-mode=g++ --target=armv7m-none-musleabi --sysroot=/opt/quectel/armv7m-none-eabi -DQAPI_TXM_MODULE -DTXM_MODULE -DTX_DAM_QC_CUSTOMIZATIONS -DTX_ENABLE_PROFILING -DTX_ENABLE_EVENT_TRACE -DTX_DISABLE_NOTIFY_CALLBACKS -DFX_FILEX_PRESENT -DTX_ENABLE_IRQ_NESTING -DTX3_CHANGES -I/opt/quectel/armv7m-none-eabi/include/c++/v1 -I/opt/quectel/armv7m-none-eabi/libc/include -g -d -v -target armv7m-none-musleabi -fuse-ld=qcld -lc++ -Wl,-mno-unaligned-access -fuse-baremetal-sysroot -fno-use-baremetal-crt -Wl,-T/tmp/firmware/cmake-build-debug/app/quectel_dam_demo.ld -Wl,-Map=/tmp/firmware/cmake-build-debug/Map.map,-gc-sections -Wl,-gc-sections -Wl,-entry=0x40000000 app/CMakeFiles/startup.dir/txm_module_preamble_llvm.o app/CMakeFiles/rheo_app.elf.dir/main.o app/CMakeFiles/rheo_app.elf.dir/src/connection.o app/CMakeFiles/rheo_app.elf.dir/src/processing.o app/CMakeFiles/rheo_app.elf.dir/src/vitals_generator.o -o app/rheo_app.elf drivers/accelerometer/libaccelerometer-LSM6DSO32.a lib/libaws_iot_jobs.a lib/libaws_iot_json.a lib/libaws_iot_shadow.a utils/json/libjson.a lib/libmbedtls.a platform/quectel/ota_pal/libplatform_quectel_ota_pal.a platform/quectel/ssl/libplatform_quectel_ssl.a lib/quectel-sdk/quectel/utils/libquectel_utils.a drivers/adc/librheo-adc.a drivers/afe/librheo-afe-driver.a app/at_cmd/librheo-at-commands.a app/attributes/librheo-attributes.a app/cryptography/librheo-certificate.a cmdline/librheo-command-line.a app/librheo-connectivity.a app/device_state/librheo-device-state.a app/early_warning_scores/librheo-early-warning-scores.a drivers/flash/librheo-flash.a utils/fs/librheo-fs.a drivers/fuel_gauge/librheo-fuel-gauge.a drivers/gpio/librheo-gpio.a drivers/i2c/librheo-i2c.a drivers/led/librheo-leds.a app/lifecycle/librheo-lifecycle.a logging/librheo-logging.a app/memory_manager/librheo-memory-manager.a app/mqtt/librheo-mqtt-thread.a app/aws/ota/librheo-ota.a app/processing/librheo-processing.a drivers/rtc/librheo-rtc.a app/settings/librheo-settings.a app/shadows/librheo-shadows.a drivers/spi/librheo-spi.a app/storage/librheo-storage.a app/threads/librheo-threads.a utils/time/librheo-util-time.a drivers/temperature/libtemperature-as6221.a drivers/accelerometer/libaccelerometer-LSM6DSO32.a lib/st-micro/libstm-lsm6dso32x.a platform/quectel/ota_pal/libplatform_quectel_ota_pal.a platform/quectel/ssl/libplatform_quectel_ssl.a app/librheo-connectivity.a drivers/led/librheo-leds.a lib/libaws_iot_ota.a app/modem/librheo-modem.a platform/quectel/ota/libquectel_ota_abstraction.a platform/quectel/ota_pal/libplatform_quectel_ota_pal.a platform/quectel/ssl/libplatform_quectel_ssl.a app/librheo-connectivity.a drivers/led/librheo-leds.a app/mqtt/librheo-mqtt-thread.a app/aws/ota/librheo-ota.a app/shadows/librheo-shadows.a lib/libaws_iot_ota.a app/modem/librheo-modem.a platform/quectel/ota/libquectel_ota_abstraction.a utils/json/libjson.a app/cryptography/librheo-certificate.a lib/libmbedtls.a lib/libaws_iot_jobs.a lib/libaws_iot_ota_mqtt.a app/device_state/librheo-device-state.a drivers/afe/librheo-afe-driver.a lib/csem/libvpraw/liblibvpraw.a /tmp/firmware/lib/csem/libvpraw/libvpraw.a drivers/afe/librheo-afe-driver.a lib/csem/libvpraw/liblibvpraw.a /tmp/firmware/lib/csem/libvpraw/libvpraw.a lib/libaws_iot_shadow.a lib/libaws_iot_mqtt.a _deps/cjson-build/libcjson_utils.a lib/libaws_iot_json.a drivers/i2c/librheo-i2c.a app/version/librheo-version.a drivers/greenteg/libgreenteg-driver.a drivers/adc/librheo-adc.a app/at_cmd/librheo-at-commands.a utils/at_parser/librheo-at-parser.a lib/libtinycbor.a drivers/flash/src/macronix-lld/libmacronix-lld.a drivers/spi/librheo-spi.a drivers/gpio/librheo-gpio.a app/settings/librheo-settings.a utils/fs/librheo-fs.a _deps/cjson-build/libcjson.a app/threads/librheo-threads.a app/memory_manager/librheo-memory-manager.a utils/time/librheo-util-time.a logging/librheo-logging.a /tmp/firmware/lib/quectel-sdk/libs/diag_dam_lib.lib /tmp/firmware/lib/quectel-sdk/libs/qapi_psm_lib.lib /tmp/firmware/lib/quectel-sdk/libs/timer_dam_lib.lib /tmp/firmware/lib/quectel-sdk/libs/txm_lib.lib lib/quectel-sdk/quectel/utils/libquectel_utils.a -lm /tmp/firmware/lib/csem/libspo2/libspo2_wemed_1.0.0/lib_arm/libspo2.a /tmp/firmware/lib/csem/libobp/lib_arm/libobp.a /tmp/firmware/lib/csem/libbr/libbr_wemed_1.0.0/lib_arm/libbr.a
 
 "/opt/quectel/bin/ld.qcld" --sysroot=/opt/quectel/armv7m-none-eabi -X --eh-frame-hdr -m armelf_linux_eabi -dynamic-linker /lib/ld-musl-arm.so.1 -o app/rheo_app.elf -L/opt/quectel/armv7m-none-eabi/lib/../lib -L/opt/quectel/armv7m-none-eabi/lib -lc++ -mno-unaligned-access -T/tmp/firmware/cmake-build-debug/app/quectel_dam_demo.ld -Map=/tmp/firmware/cmake-build-debug/Map.map -gc-sections -gc-sections -entry=0x40000000 app/CMakeFiles/startup.dir/txm_module_preamble_llvm.o app/CMakeFiles/rheo_app.elf.dir/main.o app/CMakeFiles/rheo_app.elf.dir/src/connection.o app/CMakeFiles/rheo_app.elf.dir/src/processing.o app/CMakeFiles/rheo_app.elf.dir/src/vitals_generator.o drivers/accelerometer/libaccelerometer-LSM6DSO32.a lib/libaws_iot_jobs.a lib/libaws_iot_json.a lib/libaws_iot_shadow.a utils/json/libjson.a lib/libmbedtls.a platform/quectel/ota_pal/libplatform_quectel_ota_pal.a platform/quectel/ssl/libplatform_quectel_ssl.a lib/quectel-sdk/quectel/utils/libquectel_utils.a drivers/adc/librheo-adc.a drivers/afe/librheo-afe-driver.a app/at_cmd/librheo-at-commands.a app/attributes/librheo-attributes.a app/cryptography/librheo-certificate.a cmdline/librheo-command-line.a app/librheo-connectivity.a app/device_state/librheo-device-state.a app/early_warning_scores/librheo-early-warning-scores.a drivers/flash/librheo-flash.a utils/fs/librheo-fs.a drivers/fuel_gauge/librheo-fuel-gauge.a drivers/gpio/librheo-gpio.a drivers/i2c/librheo-i2c.a drivers/led/librheo-leds.a app/lifecycle/librheo-lifecycle.a logging/librheo-logging.a app/memory_manager/librheo-memory-manager.a app/mqtt/librheo-mqtt-thread.a app/aws/ota/librheo-ota.a app/processing/librheo-processing.a drivers/rtc/librheo-rtc.a app/settings/librheo-settings.a app/shadows/librheo-shadows.a drivers/spi/librheo-spi.a app/storage/librheo-storage.a app/threads/librheo-threads.a utils/time/librheo-util-time.a drivers/temperature/libtemperature-as6221.a drivers/accelerometer/libaccelerometer-LSM6DSO32.a lib/st-micro/libstm-lsm6dso32x.a platform/quectel/ota_pal/libplatform_quectel_ota_pal.a platform/quectel/ssl/libplatform_quectel_ssl.a app/librheo-connectivity.a drivers/led/librheo-leds.a lib/libaws_iot_ota.a app/modem/librheo-modem.a platform/quectel/ota/libquectel_ota_abstraction.a platform/quectel/ota_pal/libplatform_quectel_ota_pal.a platform/quectel/ssl/libplatform_quectel_ssl.a app/librheo-connectivity.a drivers/led/librheo-leds.a app/mqtt/librheo-mqtt-thread.a app/aws/ota/librheo-ota.a app/shadows/librheo-shadows.a lib/libaws_iot_ota.a app/modem/librheo-modem.a platform/quectel/ota/libquectel_ota_abstraction.a utils/json/libjson.a app/cryptography/librheo-certificate.a lib/libmbedtls.a lib/libaws_iot_jobs.a lib/libaws_iot_ota_mqtt.a app/device_state/librheo-device-state.a drivers/afe/librheo-afe-driver.a lib/csem/libvpraw/liblibvpraw.a /tmp/firmware/lib/csem/libvpraw/libvpraw.a drivers/afe/librheo-afe-driver.a lib/csem/libvpraw/liblibvpraw.a /tmp/firmware/lib/csem/libvpraw/libvpraw.a lib/libaws_iot_shadow.a lib/libaws_iot_mqtt.a _deps/cjson-build/libcjson_utils.a lib/libaws_iot_json.a drivers/i2c/librheo-i2c.a app/version/librheo-version.a drivers/greenteg/libgreenteg-driver.a drivers/adc/librheo-adc.a app/at_cmd/librheo-at-commands.a utils/at_parser/librheo-at-parser.a lib/libtinycbor.a drivers/flash/src/macronix-lld/libmacronix-lld.a drivers/spi/librheo-spi.a drivers/gpio/librheo-gpio.a app/settings/librheo-settings.a utils/fs/librheo-fs.a _deps/cjson-build/libcjson.a app/threads/librheo-threads.a app/memory_manager/librheo-memory-manager.a utils/time/librheo-util-time.a logging/librheo-logging.a /tmp/firmware/lib/quectel-sdk/libs/diag_dam_lib.lib /tmp/firmware/lib/quectel-sdk/libs/qapi_psm_lib.lib /tmp/firmware/lib/quectel-sdk/libs/timer_dam_lib.lib /tmp/firmware/lib/quectel-sdk/libs/txm_lib.lib lib/quectel-sdk/quectel/utils/libquectel_utils.a -lm /tmp/firmware/lib/csem/libspo2/libspo2_wemed_1.0.0/lib_arm/libspo2.a /tmp/firmware/lib/csem/libobp/lib_arm/libobp.a /tmp/firmware/lib/csem/libbr/libbr_wemed_1.0.0/lib_arm/libbr.a -L/opt/quectel/armv7m-none-eabi/libc/lib -L/opt/quectel/armv7m-none-eabi/lib --start-group -lunwind -lc++ -lc++abi --end-group -L/opt/quectel/lib/clang/4.0.3/lib/baremetal --start-group -lc -lclang_rt.builtins-armv7m --end-group -lm -lc
Error: multiple definition of symbol `_ZSt10unexpectedv' in file /opt/quectel/armv7m-none-eabi/lib/../lib/libc++.a(exception.cpp.obj) and /opt/quectel/armv7m-none-eabi/lib/../lib/libc++abi.a(cxa_handlers.cpp.o)
Error: multiple definition of symbol `_ZSt13get_terminatev' in file /opt/quectel/armv7m-none-eabi/lib/../lib/libc++.a(exception.cpp.obj) and /opt/quectel/armv7m-none-eabi/lib/../lib/libc++abi.a(cxa_handlers.cpp.o)
Error: multiple definition of symbol `_ZSt14get_unexpectedv' in file /opt/quectel/armv7m-none-eabi/lib/../lib/libc++.a(exception.cpp.obj) and /opt/quectel/armv7m-none-eabi/lib/../lib/libc++abi.a(cxa_handlers.cpp.o)
Error: multiple definition of symbol `_ZSt15get_new_handlerv' in file /opt/quectel/armv7m-none-eabi/lib/../lib/libc++.a(new.cpp.obj) and /opt/quectel/armv7m-none-eabi/lib/../lib/libc++abi.a(cxa_handlers.cpp.o)
Error: multiple definition of symbol `_ZSt15set_new_handlerPFvvE' in file /opt/quectel/armv7m-none-eabi/lib/../lib/libc++.a(new.cpp.obj) and /opt/quectel/armv7m-none-eabi/lib/../lib/libc++abi.a(cxa_handlers.cpp.o)
Error: multiple definition of symbol `_ZSt9terminatev' in file /opt/quectel/armv7m-none-eabi/lib/../lib/libc++.a(exception.cpp.obj) and /opt/quectel/armv7m-none-eabi/lib/../lib/libc++abi.a(cxa_handlers.cpp.o)
Error: multiple definition of symbol `_ZSt13set_terminatePFvvE' in file /opt/quectel/armv7m-none-eabi/lib/../lib/libc++.a(exception.cpp.obj) and /opt/quectel/armv7m-none-eabi/lib/../lib/libc++abi.a(cxa_default_handlers.cpp.o)
Error: multiple definition of symbol `_ZSt14set_unexpectedPFvvE' in file /opt/quectel/armv7m-none-eabi/lib/../lib/libc++.a(exception.cpp.obj) and /opt/quectel/armv7m-none-eabi/lib/../lib/libc++abi.a(cxa_default_handlers.cpp.o)
It appears that some of the symbols are defined in both libc++ and libc++abi. What is the best way to deal with this?
 
Thank you,
Jonathan
  • Up0
  • Down0
jonathan.fisher
Join Date: 11 Oct 21
Posts: 2
Posted: Thu, 2023-07-20 11:15

A workaround for us has been to compile the external library with "-fno-exceptions". This allowed us to link and test.

  • Up0
  • Down0
or Register

Opinions expressed in the content posted here are the personal opinions of the original authors, and do not necessarily reflect those of Qualcomm Incorporated or its subsidiaries (“Qualcomm”). The content is provided for informational purposes only and is not meant to be an endorsement or representation by Qualcomm or any other party. This site may also provide links or references to non-Qualcomm sites and resources. Qualcomm makes no representations, warranties, or other commitments whatsoever about any non-Qualcomm sites or third-party resources that may be referenced, accessible from, or linked to this site.