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--musleabiThread model: posixRepository: (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.3InstalledDir: /opt/quectel/binOptions 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 -lcError: 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)
A workaround for us has been to compile the external library with "-fno-exceptions". This allowed us to link and test.