Click “Read the original text” to access more VxWorks resources
How to dynamically load .out files under VxWorks, the following is the actual code for reference:
//Device.cpp #include "other.h" #ifdef __cplusplus extern "C" { #endif int initDevice(char *arg); #ifdef __cplusplus } #endif int initDevice(char *arg) { printf("%s\n", arg); } The generated .out file needs to be used with the following command: chmod.exe a+rx Device.out int dynLoadOut( ) { char szDeviceOutPath[128] = "/ata0a/App/Device.out"; for (int j = 0; j < 3; j++) { int fdX = open (szDeviceOutPath, O_RDONLY, 0644); if (fdX == ERROR ) { printf("openfile error:%s\n", szDeviceOutPath); taskDelay(1000); continue; } else { MODULE_ID modID = loadModule (fdX, LOAD_ALL_SYMBOLS); close (fdX); if (modID == 0) { printf("loadModule error\n"); return 1; } break; } } printf("loadModule ok\n"); extern SYMTAB_ID sysSymTbl; FUNCPTR deviceEntry = 0; SYM_TYPE type; STATUS stus = symFindByName(sysSymTbl, "initDevice", (char**)&deviceEntry, &type); if (stus == ERROR) { printf("symFindByName error\n"); return 1; } else { printf("deviceEntry = 0x%x, type = %d\n", (int)deviceEntry, (int)type); char szPara[128] = "have a test!"; (*deviceEntry)(szPara); } }