Ошибка компиляции программы на C ++ с go build

Я пытаюсь встроить небольшую программу c ++ xerces в мое приложение go, чтобы проверить xml на xsd.
Программа компилируется и работает нормально, когда я использую g ++ с помощью следующей команды:

g++ test-xerces.cpp -o xercesTest -v -lxerces-c
./xercesTest

Однако при использовании go buildЯ получаю следующий вывод:

go build validation-xerces.go
# command-line-arguments
In file included from
/usr/local/include/xercesc/util/RefHashTableOf.hpp:252:0,
from
/usr/local/include/xercesc/internal/XSerializeEngine.hpp:25,
from
/usr/local/include/xercesc/internal/XSerializable.hpp:25,
from /usr/local/include/xercesc/util/QName.hpp:30,
from /usr/local/include/xercesc/framework/XMLAttr.hpp:26,
from
/usr/local/include/xercesc/framework/XMLDocumentHandler.hpp:27,
from
/usr/local/include/xercesc/parsers/AbstractDOMParser.hpp:26,
from
/usr/local/include/xercesc/parsers/XercesDOMParser.hpp:26,
from ./validation-xerces.go:10:
/usr/local/include/xercesc/util/RefHashTableOf.c:33:15: fatal error: new: No such file or directory
#include <new>
^
compilation terminated.

Рассматриваемая программа (я украл почти каждую ее часть у людей, которые умнее меня):

package main
/*
#cgo LDFLAGS: lxerces-c

#include <stdio.h>

#include <xercesc/util/XMLString.hpp>
#include <xercesc/parsers/XercesDOMParser.hpp>
#include <xercesc/framework/LocalFileInputSource.hpp>
#include <xercesc/sax/ErrorHandler.hpp>
#include <xercesc/sax/SAXParseException.hpp>
#include <xercesc/sax/EntityResolver.hpp>

XERCES_CPP_NAMESPACE_USE

class ParserErrorHandler : public ErrorHandler
{
private:
void reportParseException(const SAXParseException& ex)
{
char* msg = XMLString::transcode(ex.getMessage());
fprintf(stderr, "at line %llu column %llu, %s\n",
ex.getColumnNumber(), ex.getLineNumber(), msg);
XMLString::release(&msg);
}

public:
void warning(const SAXParseException& ex)
{
reportParseException(ex);
}

void error(const SAXParseException& ex)
{
reportParseException(ex);
}

void fatalError(const SAXParseException& ex)
{
reportParseException(ex);
}

void resetErrors()
{
}
};

void ValidateSchema(const char* xmlFilePath)
{
XercesDOMParser domParser;

ParserErrorHandler parserErrorHandler;
domParser.setErrorHandler(&parserErrorHandler);
domParser.setValidationScheme(XercesDOMParser::Val_Auto);
domParser.setDoNamespaces(true);
domParser.setDoSchema(true);
domParser.setValidationConstraintFatal(true);

domParser.parse(xmlFilePath);
if (domParser.getErrorCount() == 0)
printf("XML file validated against the schema successfully\n");
else
printf("XML file doesn't conform to the schema\n");
}

int Cmain(int argc, const char *argv[])
{
if (argc != 2)
{
printf("SchemaValidator <xml file>\n");
return 0;
}

XMLPlatformUtils::Initialize();

ValidateSchema(argv[1]);

XMLPlatformUtils::Terminate();

return 0;
}
*/
import "C"import (
"unsafe")

func main() {
argv := [][]byte{
[]byte(`/path/to/my/file.xml`),
}
c_argc := C.int(len(argv))

var b *C.char
ptrSize := unsafe.Sizeof(b)
c_argv := C.malloc(C.size_t(len(argv)) * C.size_t(ptrSize))
defer C.free(unsafe.Pointer(c_argv))

// Assign each byte slice to its appropriate offset.
for i := 0; i < len(argv); i++ {
element := (**C.char)(unsafe.Pointer(uintptr(c_argv) + uintptr(i)*ptrSize))
*element = (*C.char)(unsafe.Pointer(&argv[i][0]))
}

C.Cmain(c_argc, (**C.char)(c_argv))
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]