Я пытаюсь создать проект изображения VxWorks7 (VIP), который включает мое приложение, которое перегружает новые и удаляемые. Когда я создаю VIP и приложение отдельно с приложением в качестве загружаемого модуля ядра (DKM), оно создается и работает нормально, загружая VIP на целевом устройстве и отдельно загружая DKM приложения с помощью Workbench4. Однако, если я попытаюсь собрать VIP и DKM вместе как один загрузочный VIP, я получаю несколько ошибок определения для новых и удаляющих операторов из Workbench во время сборки следующим образом:
C:/BW/Vehicle/builds/cx20X0Up32BitDebugVsb/krnl/gnu_standard\libgnucplus.a(_x_gnu_delaop.o): In function `operator delete[](void*)':
(.text+0x0): multiple definition of `operator delete[](void*)'
C:/BW/Vehicle/builds/Vehicle/cx20X0Up32BitDebugVsb_SANDYBRIDGEgnu/Vehicle_partialImage/Debug/Vehicle_partialImage.o:C:/BW/Alcatraz/Vehicle/src/IRL/Util/heap.cpp:886: first defined here
C:/BW/Vehicle/builds/cx20X0Up32BitDebugVsb/krnl/gnu_standard\libgnucplus.a(_x_gnu_delop.o): In function `operator delete(void*)':
(.text+0x0): multiple definition of `operator delete(void*)'
C:/BW/Vehicle/builds/Vehicle/cx20X0Up32BitDebugVsb_SANDYBRIDGEgnu/Vehicle_partialImage/Debug/Vehicle_partialImage.o:C:/BW/Alcatraz/Vehicle/src/IRL/Util/heap.cpp:841: first defined here
C:/BW/Vehicle/builds/cx20X0Up32BitDebugVsb/krnl/gnu_standard\libgnucplus.a(_x_gnu_newaop.o): In function `operator new[](unsigned int)':
(.text+0x0): multiple definition of `operator new[](unsigned int)'
C:/BW/Vehicle/builds/Vehicle/cx20X0Up32BitDebugVsb_SANDYBRIDGEgnu/Vehicle_partialImage/Debug/Vehicle_partialImage.o:C:/BW/Alcatraz/Vehicle/src/IRL/Util/heap.cpp:813: first defined here
C:/BW/Vehicle/builds/cx20X0Up32BitDebugVsb/krnl/gnu_standard\libgnucplus.a(_x_gnu_newop.o): In function `operator new(unsigned int)':
(.text+0x0): multiple definition of `operator new(unsigned int)'
C:/BW/Alcatraz/Vehicle/builds/Vehicle/cx20X0Up32BitDebugVsb_SANDYBRIDGEgnu/Vehicle_partialImage/Debug/Vehicle_partialImage.o:C:/BW/Alcatraz/Vehicle/src/IRL/Util/heap.cpp:808: first defined here
collect2.exe: error: ld returned 1 exit status
Служба поддержки WindRiver предложила решение сделать следующие объявления в исходном файле, где операторы new и delete перегружены. Предполагается, что это сигнализирует компилятору/компоновщику опустить библиотечную версию операторов new/del.
int ___x_gnu_newaop_o = 1;
int ___x_gnu_newop_o = 1;
int ___x_gnu_delaop_o = 1 ;
int ___x_gnu_delop_o = 1;
Выполняя это, я по-прежнему получаю те же множественные определенные ошибки, что и выше, и служба поддержки WindRiver не имеет никаких жизнеспособных предложений. Кто-нибудь пробовал перегружать глобальные ::new и ::delete в VxWorks7 с помощью компилятора Gnu?
Вот ссылка на проблему в службе поддержки WindRiver 66370. Не уверен, что он имеет публичный доступ.