Я пытаюсь создать проект VxWorks7 Image Project (VIP), который включает мое приложение, которое перегружает новые и удаляет. Когда я создаю VIP и приложение отдельно с приложением в качестве загружаемого модуля ядра (DKM), он строит и работает нормально, загружая VIP в цель и загружая приложение DKM отдельно с помощью Workbench4. Однако, если я пытаюсь построить VIP и DKM вместе как единый загрузочный VIP я получить несколько определить ошибки для новых и удалять операторов из Workbench во время сборки следующим образом:Как перегрузить новые/удалить операторы в VxWorks 7 с помощью компилятора Gnu
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 предложил решение сделать следующие декларации в исходном файле, где новые и удаленные операторы перегружены. Это должно сигнализировать компилятору/компоновщику, чтобы опустить библиотечную версию новых/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 не было никаких жизнеспособных предложений. Кто-нибудь испытывал опыт перегрузки global :: new и :: delete в VxWorks7 с использованием компилятора Gnu?
Это ссылка на вопрос о поддержке WindRiver 66370. Не уверен, что у него есть открытый доступ.