Я сделал проект vxWorks, используя загружаемый модуль ядра в vxWorks. Он прекрасно собирается, но когда я загружаю его в среду моделирования, он будет жаловаться на неразрешенные библиотеки C ++.
Это единственный код
#include <iostream>
int helloworld()
{
std::cout << "HELLO WORLD\n";
return 0;
}
Я получу неразрешенные std :: uncaught_exception (), __cxa_end_catch, __gx_personality_v0, std :: cout ….. и т. Д.
У кого-нибудь была эта проблема? Кажется, что это просто не включает библиотеки C ++ … если так, кто-нибудь знает, как это добавить?
Благодарю.
Обычно на вкладке «Инструменты сборки» свойств проекта в раскрывающемся списке «Линкер» должны быть указаны следующие параметры для C ++ DKM для проекта PPC:
echo "building $@";
rm -f %OutFile%;
ddump -Ng %Objects% %Libraries% | tclsh $(WIND_BASE)/host/resource/hutils/tcl/munch.tcl -c ppc -tags $(VSB_DIR)/tags/ppc/PPC32/common/dkm.tags > $(OBJ_DIR)/ctdt.c;
%ccompilerprefix%
$(TOOL_PATH)
dcc %DebugModeFlags% $(CC_ARCH_SPEC) -Xdollar-in-ident -Xforce-declarations $(ADDED_CFLAGS)
%Includes% $(ADDED_INCLUDES) -DCPU=$(CPU) -DTOOL_FAMILY=$(TOOL_FAMILY) -DTOOL=$(TOOL) -D_WRS_KERNEL -D_VSB_CONFIG_FILE=\"$(VSB_CONFIG_FILE)\" $(DEFINES) -o $(OBJ_DIR)/ctdt.o -c $(OBJ_DIR)/ctdt.c;
%linkerprefix% $(TOOL_PATH)dld -tPPCFH:vxworks68 -X -r5 %ToolFlags% -o %OutFile% $(OBJ_DIR)/ctdt.o
%Objects%
%Libraries% $(LIBPATH) $(LIBS) $(ADDED_LIBPATH) $(ADDED_LIBS) && if [ "$(EXPAND_DBG)" = "1" ]; then plink "$@";fi
Проверьте, есть ли это у вас в вашем проекте. Особенно во всем % Библиотека% часть.
Постскриптум Не берите в голову форматирование — это просто для удобства чтения.
Вы используете стандартный симулятор? Если это так, убедитесь, что в образ ядра включены все компоненты c ++.
Для этого создайте новый проект образа ядра и в конфигурации ядра включите компонент iostream.
Хотя есть и другие способы, но это должно решить проблему.
Лучше использовать kprintf для получения вывода на экран, поскольку это стандартная практика.