Как да стартирате 64-битово Java приложение от 32-битово C++ приложение?

Използвам проста C++ програма, за да стартирам изпълним .jar файл в Windows 7 64 bit. Очаквах това да изпълни 64-битова java, но не го прави, изпълнява 32-битовата версия.

Използвам следния код:

const char* javaw_path     = "javaw.exe";
const std::string memory   = "-Xmx" + user_configured_memory();
const char* jar            = "-jar";
const char* jar_file       = "\"HelloWorld.jar\"";
const std::string cli_args =  get_cli_args(argc, argv);

const char* args[] = {javaw_path, memory.c_str(),
       jar, jar_file, cli_args.c_str(), static_cast<char*>(NULL)};    

const int ret = execvp(javaw_path, args);

Когато java приложението се стартира, то регистрира архитектурата на машината като „x86“, а не „amd64“, както се очаква. Получавам тази информация, като проверявам:

System.getProperty("os.arch")

Когато изпълня същата команда от командния ред, нещата работят както очаквах - Java приложението регистрира 'amd64'.

Как мога да променя стартовата си програма, за да стартирам 64-битова Java?


person CodeBuddy    schedule 10.11.2011    source източник
comment
Възможно ли е просто да имате различни PATHs? Вашият собствен PATH съдържа java 64bit dir, докато 32-битовото приложение наследява PATH, който има java 32bit dir, така че първо намира 32bit javaw.exe и го изпълнява?   -  person DejanLekic    schedule 11.11.2011
comment
Можете ли да опитате да бъдете изрични за това кой javaw.exe искате да стартирате, напр. C:\\Program Files\\Java\\jdk1.7.0\\bin\\javaw.exe   -  person Peter Lawrey    schedule 11.11.2011


Отговори (1)


Ако вашата C++ програма е 32-битова, не можете да го направите. Трябва да компилирате C++ приложението като 64-битово и след това можете да извикате друго 64-битово приложение от изпълнимия файл.

person Piotr Surma    schedule 19.01.2012