Я портирую программу на C++ с Unix на Win7. Программа выполняет только некоторые фоновые вычислительные задачи, это программа командной строки. Поэтому я использую сборку программы на cygwin
с g++
на 32-битной виртуальной машине win7.
Моя целевая система - это 64-битный физический ПК с win7. После того, как я скопировал свою программу на целевой компьютер, она всегда дает сбой при вызове system()
. Мне нужно использовать system()
для запуска команды curl
. Это работает на моей 32-битной виртуальной машине win7, но всегда не работает на целевом 64-битном ПК с win7.
Вы можете догадаться, есть ли проблема с командой curl
. Я бы сказал нет. Потому что я могу вручную запустить команду curl
из окна cmd. Я также пробовал system("dir")
, он тоже не работает с той же ошибкой.
На 64-битном ПК с win7 system()
всегда возвращает 127, ошибка - «Permission denied». Кто-нибудь знает, в чем проблема.
может быть -1 как беззнаковое значение, хотя это только предположение. Вы должны показать минимальный воспроизводимый пример
Вы пробовали запускать свою команду прямо с консоли?
Да, я могу запустить команду из окна cmd
. system()
всегда терпит неудачу при выполнении любой команды.
Как сказал @ user463035818, покажите нам минимальный, полный и проверяемый пример.
Вам не нужно использовать system()
для запуска curl
, если вместо этого вы используете libcurl
в своем проекте. Не обращайтесь к внешнему командному процессору ОС, когда в этом нет необходимости.
Мне просто нужно скачать файл с пульта, вызвать команду curl
очень просто. У вас есть простой пример использования libcurl
?
Нам действительно нужен минимальный воспроизводимый пример, чтобы помочь вам в дальнейшем.
Два очка. 1) Используйте 64-битную виртуальную машину для создания программы для 64-битной физической машины. У вас должен быть установлен 32-разрядный или 64-разрядный cygwin на физическом компьютере, чтобы обеспечить cygwin1.dll
разрядностью, требуемой исполняемым файлом. Используйте версию компилятора g ++ mingw32 или mingw64, если вы не хотите устанавливать cygwin на физическом компьютере. Используйте команду cygwin file
, чтобы проверить разрядность исполняемого файла и проверить, является ли он exe-файлом cygwin или mingw.
2) Windows API обеспечивает 8-битный код возврата от дочернего процесса к его родительскому. Использование значений от 0 до 127 позволяет избежать указания того, подписан ли код или нет. Кстати, dir.exe
нет, это часть командного процессора, например cmd.exe
.
Слишком мало информации