У меня есть подпрограмма преобразователя, написанная на C ++, которая настроена на очистку всех пробелов и отображение значения, если входная строка либо пуста, либо пуста. Код C ++ компилируется и протестирован правильно, но у меня возникают проблемы с тем, чтобы эта процедура работала в Datastage.
Согласно инструкциям, я скопировал точные параметры компилятора, которые есть в моей среде DS, как показано ниже.
g++ -c -O -fPIC -Wno-deprecated -m64 -mtune=generic -mcmodel=small BlankToValue.cpp
g++ -shared -m64 BlankToValue.so BlankToValue.o
Однако при тестировании подпрограммы в задании я получаю следующую ошибку.
Sequential_File_36,0: Внутренняя ошибка: (shbuf): iomgr / iomgr. C: 2649
Есть ли другой набор параметров, который я должен использовать для компиляции?
Для справки, код C ++.
#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <locale.h>
#include <locale>
char * BlankToValue(char *InStr, char *RepStr)
{
if (InStr[0] == '\0') // Check for null pointer at first character of input string.
{
return RepStr; // Return replacement string if true. This is to prevent unnecessary processing.
} else
{
const char* checkstr = InStr; // Establish copy of inputstring stored in checkstring.
do { // Start outer loop.
while (isspace(*checkstr)) { // Inner loop while current checkstring byte is whitespace.
++checkstr; // Increment to next checkstring byte.
}
} while ((*InStr++ = *checkstr++)); // Set inputstring byte to current checkstring and iterate both. Breaks when either string evaluates to null.
*InStr = '\0'; // Set null terminator for input string at current byte location.
if (InStr[0] == '\0') // Checks first character of cleaned input string for null pointer.
{
return RepStr; // Return replacement string if true.
} else
{
return InStr; // Return new input string if false.
}
}
}