У меня есть проект на локальном компьютере, и я хочу запустить / отладить тест cppunit на сервере (Debian). Я создал .o файлы с Netbeans и установил права на исполняемый файл.
drwxr-xr-x 2 myName myGroup 4096 18. Dec 08:40 .
drwxr-xr-x 3 myName myGroup 4096 18. Dec 08:40 ..
-rwxr-xr-x 1 myName myGroup 393488 18. Dec 08:40 SisyTestData.o
-rwxr-xr-x 1 myName myGroup 3127 18. Dec 08:40 SisyTestData.o.d
-rwxr-xr-x 1 myName myGroup 30016 18. Dec 08:40 SisyTestDataRunner.o
-rwxr-xr-x 1 myName myGroup 173 18. Dec 08:40 SisyTestDataRunner.o.d
Если я пытаюсь запустить ./SisyTestDataRunner из каталога, где он находится, я получаю
bash: ./SisyTestDataRunner: Datei oder Verzeichnis nicht gefunden
(означает: файл или каталог не найден)
Если я пытаюсь запустить ./SisyTestDataRunner.o я получаю
bash: ./SisyTestDataRunner.o: Kann die Datei nicht ausführen.
(означает: не удается выполнить файл)
SisyTestDataRunner выглядит следующим образом:
#include <cppunit/BriefTestProgressListener.h>
#include <cppunit/CompilerOutputter.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/TestResult.h>
#include <cppunit/TestResultCollector.h>
#include <cppunit/TestRunner.h>
int main() {
// Create the event manager and test controller
CPPUNIT_NS::TestResult controller;
// Add a listener that colllects test result
CPPUNIT_NS::TestResultCollector result;
controller.addListener(&result);
// Add a listener that print dots as test run.
CPPUNIT_NS::BriefTestProgressListener progress;
controller.addListener(&progress);
// Add the top suite to the test runner
CPPUNIT_NS::TestRunner runner;
runner.addTest(CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest());
runner.run(controller);
// Print test in a compiler compatible format.
CPPUNIT_NS::CompilerOutputter outputter(&result, CPPUNIT_NS::stdCOut());
outputter.write();
return result.wasSuccessful() ? 0 : 1;
}
Файл SisyTestData содержит один тестовый сценарий, который работал, когда я запустил его на локальном компьютере (но он работал на сервере).
Разве вообще невозможно запустить файл, созданный netbeans, из командной строки? Должен ли я скомпилировать и связать его непосредственно на сервере?
Хорошо! идти по шагам.
Для этого, я думаю, вы можете напрямую связать их объектные файлы на удаленной машине в этом режиме:
$ g++ -o mybin myobj.o
Обратите внимание, что компоновщик должен быть в состоянии найти все ссылки на библиотеку, включенную в проект!
2) Обычно в стандартном проекте C ++ в NetbeansIDE после сборки проекта вы можете найти исполняемый файл в папке «dist», пример «dist / Debug / GNU-Linux-x86». Этот файл готов к запуску на локальном и удаленном компьютере. машины на базе linux.
3) Возможно, вашему исполняемому файлу нужна системная библиотека.
Ссылки на эту библиотеку на вашем локальном компьютере указаны правильно, но не на удаленном компьютере
Чтобы решить эту проблему, вам может помочь команда,
$ ldd mybin
Вы можете просмотреть весь процесс, упрощенный на этом скриншоте:
Этапы компиляции в NetBeans:
Вы не запускаете объектные файлы. Объектные файлы используются компоновщиком для создания реального исполняемого файла.
Создание программы из набора исходных файлов на C ++ (или C) выполняется в несколько этапов:
#include
,SisyTestData.o
).